java 编译问题_在Eclipse外部构建时的Java泛型代码编译问题

我已经为一个非常小的GWT项目配置了Maven构建.从Eclipse进行编译/运行不会造成任何问题,但是当我执行Maven构建时,我在一个地方就遇到了编译问题(这是GWT的“客户端”代码,但是我不确定是否是这种情况). Maven /编译输出:

[..]SmartTable.java:[63,52] ')' expected

[..]SmartTable.java:[63,53] ')' expected

[..]SmartTable.java:[63,69] ';' expected

[..]SmartTable.java:[63,71] not a statement

[..]SmartTable.java:[63,77] ';' expected

[..]SmartTable.java:[63,79] not a statement

..其中此特定行定义如下:

final Comparator comparator = ((SmartTable.ComparableColumn) column).comparator;

如您所料,我正在遍历为此泛型类定义的所有列(我称之为“ SmartTable”),并获取一个比较器(当然,如果是SmartTable.ComparableColumn的列instance)以进行进一步的操作.

类’Column’和’ComparableColumn’嵌套在SmartTable中,其标题如下:

public abstract class Column {

// private String id;

private String caption;

private int width;

private Filter filter;

...

public class ComparableColumn extends Column {

private Comparator comparator;

...

当它从Eclipse编译时,我在打包WAR(没有’clean’-简单的软件包就可以工作,因为Eclipse配置为将.class文件放置在Maven使用的同一目标目录中)方面没有问题,并且可以正确地部署/运行它.

我已经尝试过更改maven-compiler-plugin和配置(将值设置为1.5、1.6和1.4-为了进行实验以查看它是否通常会在泛型上引起抱怨),但这无济于事. Eclipse项目编译器的遵从性是默认设置(1.6).看来其他泛型代码没有其他编译问题.

试图使它尽可能短,但是不确定我是否做得好:)

编辑:按需提供更多代码

public class SmartTable extends FlexTable {

private List columns = new ArrayList();

...

private Comparator currentComparator;

...

public void init(Comparator defaultComparator) {

this.currentComparator = defaultComparator;

...

int index = 0;

for (Column column : columns) {

...

if (column instanceof SmartTable.ComparableColumn) {

@SuppressWarnings("unchecked")

final Comparator comparator = ((SmartTable.ComparableColumn) column).comparator;

...

}

...

public abstract class Column {

// private String id;

private String caption;

private int width;

private Filter filter;

private List> widgetCreators;

public Column(/* String id, */String caption, int width, Filter filter, List> widgetCreators) {

...

public class SimpleColumn extends Column {

public SimpleColumn(/* String id, */String caption, int width, Filter filter, List> widgetCreators) {

super(/* id, */caption, width, filter, widgetCreators);

}

...

public class ComparableColumn extends Column {

private Comparator comparator;

public ComparableColumn(/* String id, */String caption, int width, Filter filter,

List> widgetCreators, Comparator comparator) {

super(/* id, */caption, width, filter, widgetCreators);

this.comparator = comparator;

}

...

}

EDIT2:实际问题似乎非常集中:)

public class SmartTable2 {

public void init() {

Column c = new ComparableColumn();

final Comparator comparator = ((SmartTable2.ComparableColumn) c).comparator;

}

class Column {

}

class ComparableColumn extends Column {

Comparator comparator;

}

}

EDIT3:一些想法,希望更接近解决方案

..因此,这不是简单地使用javac进行编译,会引发完全相同的编译错误.因此,我现在所学到的是:Eclipse使用它自己的内部Java编译器-它是JDT Core的一部分(希望我没有误解它);因此,可能是JDT编译器能够编译这样的语法,而Sun的JDK javac却不能? (糟糕,Oracle不是Sun)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值