为什么javac在@Override注释上失败

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

当我实现接口的方法时,Eclipse正在添加@Override注释。Eclipse似乎对此没有任何问题。而Cruise Control的自动化构建过程似乎对此没有任何问题。但是,当我从命令行构建,使用运行javac的ant时,出现此错误:

[javac] C:\path\project\src\com\us\MyClass.java:70: method does not override a method from its superclass
[javac]     @Override
[javac]      ^
[javac] 1 error

Eclipse在Java 1.6下运行。Cruise Control运行Java 1.5。无论我使用哪个版本的Java,我的ant构建都会失败。

提问于
用户回答回答于

@Override注释规范在Java 1.6中进行了更改。在Java 1.5中,编译器不允许在已实现的接口方法上使用@Override注释,但是在1.6中它可以。我找到的第一个搜索结果是这里的一篇博文。。它没有很好的记录,但它确实发生了变化。

Eclipse正在添加它,因为您的Eclipse已设置为1.6合规性......您应该尝试使您的构建和eclipse环境保持在相同版本的Java上。您指定的Cruise Control运行Java 5时,不知道它是否使用单独的JDK6编译。

独立于上述1.5和1.6 @Override注释规则,请记住Eclipse有其自己的编译器实现(不是javac),并且偶尔会有不同的行为。只要在Eclipse中编译了某些东西,而不是Ant或Maven,就需要找到一种让编译器感到满意的方法。

用户回答回答于

我无法真正解释你所看到的问题,但它似乎与JDK 5不允许@Override接口上实现的方法,仅在超类中存在的重载方法有关。

JDK 6将允许其中@Override任何一个。

如果你的ant构建失败,它可能会传递一个source参数给javac,请求遵从JDK 5。

扫码关注云+社区