Eclipse indigo,java 1.6
public interface I {
String getName();
}
/* and in another file */
public enum E implements I {
E1() {
String getName() { return "foo"; }
};
}
在Eclipse中,这有效!其他类可以在类型I的引用上调用getName()。实际的javac拒绝它,声称枚举中没有getName()这样的东西。这只是一个Eclipse bug吗?
请注意,对此有些奇怪的是方法定义 在枚举器内。如果我做正常的事情,它在Eclipse和Javac中都可以正常工作,并且在枚举的底部定义了返回字段值的函数。
首先,我同意@yshavit。
否则它可能与此相关: maven中javac编译命令错误的解决方法
我认为它的名称顺序相关。尝试重命名你的界面A,它可能首先编译,事情应该工作。
getName()
在 E1
应该 public
- 那是什么导致你的问题?否则,您尝试使用package-private方法覆盖公共方法(接口中声明的所有方法都是公共方法),这是不允许的。
接口方法是 上市 作用域。提高枚举中的可见性级别,它应该成功编译。作为旁注,您的代码在我的Eclipse版本中显示编译错误(在Mac 0S X 10.7.2,JDK 1.6上运行的Indigo)。
请记住,Eclipse实现了自己的解析器和编译器,它提供了与其编辑器紧密绑定的输出。通常,它运作良好;但是,当新的语言功能发挥作用时,编译器在实现新语言功能时往往会落后。
该 javac
命令行(非常接近)总是正确的,假设您从Oracle / SUN获得了javac。
yshavit的答案是最好的,因为它确定了它不应该在Eclipse中编译的原因。到现在为止,我想它已被修复(并且在Eclipse中正确编译)。