Eclipse любит это, javac ненавидит его, это перечисление, вроде, с интерфейсом
Eclipse индиго, java 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, если я делаю обычную вещь и имею функцию, указанную в нижней части перечисления, возвращающую значение поля.
Ответы
Ответ 1
Сначала я согласен с @yshavit.
В противном случае это может быть связано с этим: Обходной путь для ошибки порядка компиляции javac в maven
Я думаю, что это имя связано с порядком. Попробуйте переименовать интерфейс A, он может скомпилироваться первым, и все должно работать.
Ответ 2
getName()
в E1
должно быть public
- это то, что вызывает проблемы? В противном случае вы пытаетесь переопределить общедоступный метод (все методы, объявленные в интерфейсах, являются общедоступными) с помощью метода private-private, который не разрешен.
Ответ 3
Методы интерфейсов являются общедоступными. Увеличьте уровень видимости в вашем перечислении, и он должен успешно скомпилироваться. В качестве побочного примечания ваш код показывает ошибку компиляции в моей версии Eclipse (Indigo работает на Mac 0S X 10.7.2, JDK 1.6).
Ответ 4
Имейте в виду, что Eclipse реализует свой собственный синтаксический анализатор и компилятор, который обеспечивает вывод, который жестко связывается с ним. Обычно он работает очень хорошо; однако, когда появляется новая функция языка, компилятор имеет тенденцию отставать в реализации новой языковой функции.
Командная строка javac
(почти) всегда правильная, если вы получаете свой javac из Oracle/SUN.
Ответ yshavit лучше всего, поскольку он определяет причину, по которой он не должен компилироваться в Eclipse. К настоящему моменту я предполагаю, что он исправлен (и правильно не будет компилироваться в Eclipse).