Затмение любит это, javac ненавидит это, это enum, вроде как, с интерфейсом - PullRequest
11 голосов
/ 07 марта 2012

Затмение Индиго, Ява 1.6

public interface I {
  String getName();
}

/* and in another file */

public enum E implements I {
  E1() {
     String getName() { return "foo"; }
  };
}

В Eclipse это сработало! Другие классы могут вызывать getName () для ссылок типа I. Фактический javac отклонил его, заявив, что в перечислении нет такой вещи, как getName (). Это просто ошибка Eclipse?

Обратите внимание, что странным является определение метода внутри перечислителя . Все это прекрасно работает как в Eclipse, так и в Javac, если я делаю обычные вещи, и у меня определена функция в нижней части перечисления, возвращающая значение поля.

Ответы [ 4 ]

12 голосов
/ 07 марта 2012

getName() в E1 должно быть public - это то, что вызывает у вас проблемы? В противном случае вы пытаетесь переопределить открытый метод (все методы, объявленные в интерфейсах как публичные) с помощью метода private-package, что недопустимо.

1 голос
/ 07 марта 2012

Сначала я согласен с @ yshavit.

В противном случае это может быть связано с этим: Временное решение для ошибки порядка компиляции javac в maven

Я думаю, это связано с порядком имен. Попробуйте переименовать ваш интерфейс A, он может сначала скомпилироваться, и все должно работать.

1 голос
/ 07 марта 2012

Методы интерфейса: public .Увеличьте уровень видимости в вашем перечислении, и оно должно успешно скомпилироваться.В качестве примечания, ваш код показывает ошибку компиляции в моей версии Eclipse (Indigo работает на Mac 0S X 10.7.2, JDK 1.6).

0 голосов
/ 20 июня 2013

Имейте в виду, что Eclipse реализует свой собственный анализатор и компилятор, который обеспечивает вывод, тесно связанный с его редактором.Обычно это работает очень хорошо;однако, когда в игру вступает новая языковая функция, компилятор имеет тенденцию отставать в реализации новой языковой функции.

Командная строка javac (очень почти) всегда верна, если вы получаете свой javac из Oracle / SUN.

Лучше всего ответ yshavit, поскольку он определяет причину, по которой он не долженскомпилировать в Eclipse.Теперь я представляю, что это исправлено (и не будет правильно компилироваться в Eclipse).

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