Eclipse находит синтаксические ошибки, которых нет в NetBeans - PullRequest
0 голосов
/ 10 января 2012

Я недавно переключился с NetBeans на Eclipse, и Eclipse обнаруживает синтаксические ошибки во многих местах моего Project, чего нет у 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 автоматически не помещается в целое число?), Поскольку он работает во время выполнения из Netbeans. Я предполагаю, что где-то в Eclipse есть настройка конфигурации?

Ответы [ 3 ]

3 голосов
/ 10 января 2012

Похоже, автобокс отключен. Убедитесь, что для Window-> Preferences-> Java-> Compiler-> Errors / Warnings для преобразования Boxing и unboxing не установлено значение Error. Также убедитесь, что Window-> Preferences-> Java-> Installed JRE использует JDK \ JRE, который составляет не менее 1,5.

1 голос
/ 10 января 2012

Вы можете настроить предупреждения компилятора в Window-> Preferences-> Java-> Compiler-> Errors / Warnings.

Убедитесь также, что вы компилируете против правильной версии Java (проверьте, находится ли ваш Java 1.6 в пути сборки, и проверьте уровень JDK Compilance, см. Предпочтения-> Java-> Компилятор)

0 голосов
/ 10 января 2012

Изменить объявление на

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

и это решит вашу проблему.

Также вы можете изменить эту строку

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

Сравнение Integer с == не является хорошей практикой. Это работает только изредка. Вы действительно должны использовать 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 (или поставщика) или настройки вашего проекта.

...