tangguo

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

java

当我实现接口方法时,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版本,我的蚂蚁构建都会失败。


阅读 326

收藏
2020-10-16

共1个答案

小编典典

该@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)时,您都需要找到一种使两个编译器都满意的方法。

2020-10-16