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

2022-08-31 17:49:14

Eclipse 在实现接口方法时添加了@Override注释。Eclipse似乎对此没有问题。我们来自巡航控制的自动化构建过程似乎对此没有问题。但是当我从命令行构建时,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 在 Java 1.6 下运行。巡航控制正在运行Java 1.5。无论我使用哪个版本的Java,我的蚂蚁构建都失败了。


答案 1

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

Eclipse 之所以添加它,是因为您的 Eclipse 设置为 1.6 合规性。您应该尝试将构建和 Eclipse 环境保留在同一版本的 Java 上。我不清楚您指定的巡航控制是否运行Java 5,它是否使用单独的JDK6进行编译。

与上述 1.5 与 1.6 注释规则分开,请记住 Eclipse 有自己的编译器实现(不是 ),并且偶尔会有不同的行为。每当有些东西在Eclipse中编译,但不是Ant或Maven编译时,你都需要找到一种方法来让两个编译器都满意。@Overridejavac

Here's a screenshot of changing the compiler in eclipse


答案 2

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

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

如果你的蚂蚁构建失败,它可能会向javac传递一个参数,要求JDK 5合规性。source


推荐