ошибки компилятора :: Intellij Idea против Eclipse - PullRequest
2 голосов
/ 14 февраля 2011

Различные разработчики используют разные IDE в моей команде. Один пользователь Intellij Idea написал такой код

public class Bar<A> extends AbstractSet<Bar.Inner> {  
    class Inner {
    }

    @Override
    public Iterator<Inner> iterator() {
        return null;
    }

    @Override
    public int size() {
        return 0;
    }
}

Другой (пользователь затмения) сказал, что он компилируется только с заменой

 public Iterator<Inner> iterator() {

до

 public Iterator<Bar.Inner> iterator() {

или

 extends AbstractSet<Bar.Inner>

до

 extends AbstractSet<Bar<A>.Inner>
 extends AbstractSet<Bar<?>.Inner>//other variant

Что такое поведение правильного компилятора? Где я могу получить список таких вопросов?

дополнительная информация
затмение:

  • версия: Helios Service Release 1
  • сборка: 20100917-0705
  • jdk: 1.6.0_23 (установлено на компьютере)

идея:

  • версия: 10.0.2
  • сборка: 103,72
  • jdk: 1.6.0_21 (Справка -> О программе)

UPD Это моя ошибка. Об этом сообщает идея, но только при создании приложения. Но, думаю, это тоже ошибка Идеи.

Ответы [ 5 ]

2 голосов
/ 14 февраля 2011

Это может показаться более вероятным из-за основной версии JDK, чем из IDE - вы проверили, что все они используют идентичные версии, например, JDK 1.6.0_23?

1 голос
/ 14 февраля 2011

Как указано ранее duffymo, Eclipse не использует JDK от Sun, а использует собственный компилятор (который лучше поддерживает непрерывную компиляцию и игнорирует некоторые ошибки во время выполнения).

Тем не менее, цель команды Eclipse - добиться максимально последовательного поведения с Sun JDK.Поэтому, если вы получаете сообщение об ошибке, которое, по вашему мнению, должно быть исправлено, вы должны сообщить об ошибке команде Eclipse.

Другое подобное поведение можно прочитать в моем блоге .

1 голос
/ 14 февраля 2011

Версия JDK, которую вы видите в диалоговом окне about, - это версия Java, с которой запускается IDEA. JDK, используемый для компиляции, находится в Project Structure -> Project -> Project SDK.

Я проверил ваш код на IDEA Community 10.0.1 для Windows с Java 1.6_20, openjdk 1.6.20 и Java 1.7.0. Все три дали мне ошибки компилятора. Вы также можете настроить IDEA на использование компилятора eclipse: Настройки -> Компилятор -> Компилятор Java -> Использовать компилятор: Eclipse. Также выдает ошибку компиляции:

Компилятор Eclipse:

The return type is incompatible with <Test.Inner>.iterator()

Java 7:

Bar is not abstract and does not override abstract method iterator() in AbstractCollection

iterator() in Bar cannot override iterator() in AbstractCollection

method does not override or implement a method from a supertype

Java 6 и OpenJDK 6:

Bar is not abstract and does not override abstract method iterator() in java.util.AbstractCollection

iterator() in Bar cannot override iterator() in java.util.AbstractCollection; attempting to use incompatible return type
found   : java.util.Iterator<Bar<A>.Inner>
required: java.util.Iterator<Bar.Inner>

method does not override or implement a method from a supertype

Так что это не проблема IDEA, это что-то с JDK, который вы используете для компиляции.

1 голос
/ 14 февраля 2011

Держу пари, Eclipse JDK - это вариант IBM, который отличается от Sun.

0 голосов
/ 14 февраля 2011

У меня была такая же ошибка некоторое время назад.В Eclipse была ошибка, и компилятор не жаловался, когда компиляция с javac показала ошибки.Я подал ошибку давно, но, похоже, ее больше нет в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...