Eclipse发现netbeans没有的语法错误

时间:2012-01-10 09:35:10

标签: eclipse netbeans syntax-error

我最近从Netbeans切换到了Eclipse,Eclipse在我的项目批次中发现了Netbeans没有的语法错误,我无法弄清楚原因。据我们所知,两个IDE都设置为使用java 1.6。这个问题的一个例子如下(这实际上是可怕的代码,但我正在处理遗留的东西):

Map map;
map = new Hashtable();

... add some stuff to map

int number = 5;
int status = 7;

assertTrue(number == map.get(status));

上面回到“不兼容的操作数类型int和Object”,而Netbeans根本没有抱怨。我实际上并不遵循为什么这不起作用(int对象不会被自动装箱到Integer?),因为它在Netbeans的运行时工作。我假设在eclipse的某个地方有配置设置?

3 个答案:

答案 0 :(得分:3)

看起来禁用了自动装箱。检查Window-> Preferences-> Java-> Compiler->错误/警告Boxing和拆箱转换未设置为Error。另请检查Window-> Preferences-> Java-> Installed JRE是否使用至少为1.5的JDK \ JRE。

答案 1 :(得分:1)

您可以在Window-> Preferences-> Java-> Compiler-> Errors / Warnings下设置编译器警告。

确保您正在编译正确的Java版本(检查您的1.6 Java是否在构建路径中并检查JDK Compilance级别,请参阅Preferences-> Java-> Compiler)

答案 2 :(得分:0)

将声明更改为

    Map<Integer,Integer> map;
    map = new Hashtable<Integer,Integer>();

这将解决您的问题。

或者,您可以更改此行

    assertTrue(Integer.valueOf(number) == map.get(status));

将整数与==进行比较并不是一种好习惯。它只是偶尔工作。你真的应该使用equals()。

我不知道为什么你的情况下自动装箱不会自动发生,也许知道规格更好的人可以提供答案。

P.S。更好的是将其更改为

    assertEquals(number, map.get(status));

这将按预期工作。

在澄清它是遗留代码后,我的建议如下。将您的代码更改为:

Map map;
map = new Hashtable();

... add some stuff to map

Integer number = Integer.valueOf(5);
Integer status = Integer.valueOf(7);

assertEquals(number, map.get(status));

(我甚至会定义Integer类型的临时变量,其中我放置了map.get(status)的结果,但它是否是要执行此操作的样式的问题;这将有助于编译器)。此处,未使用功能。

为什么你没有Netbeans的问题?我的猜测是因为您的JRE(或供应商)版本或您的项目设置。