当我实现接口的方法时,Eclipse会添加@Override注释。Eclipse在这方面似乎没有问题。我们来自Cruise Control的自动化构建过程似乎对此没有问题。但是当我从命令行构建时,在ant运行javac的情况下,我得到了这个错误:
[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在Java1.6下运行。巡航控制运行的是Java 1.5。无论我使用哪个版本的Java,我的ant构建都会失败。
发布于 2010-02-26 00:41:58
@Override
注释规范在Java1.6中发生了变化。在Java1.5中,编译器不允许在已实现的接口方法上使用@Override
注释,但在1.6中允许。我找到的第一个搜索结果是一个blog post here.。It was not well documented,但它确实改变了。
Eclipse之所以添加它,是因为您的Eclipse是为1.6兼容性设置的。您应该尽量将构建环境和eclipse环境保持在同一版本的Java上。我不清楚您是否指定Cruise Control正在运行Java5,它是否正在使用单独的JDK6进行编译。
与上面1.5vs1.6Eclipse注释规则不同,请记住@Override
有自己的编译器实现(而不是javac
),并且偶尔会有不同的行为。每当在Eclipse中编译某些东西,而不是Ant或Maven时,您将需要找到一种方法来使两个编译器都满意。
发布于 2010-02-26 00:39:33
发布于 2012-09-17 21:11:02
很多人,包括我,都被这件事搞砸了。See here for a bigger SO discussion
https://stackoverflow.com/questions/2335655
复制相似问题