javac -Xlint:覆盖不起作用

时间:2010-12-01 23:40:19

标签: java ant javac

当我有一个覆盖超类方法而没有指定@Override注释的类时,我试图让我的java构建失败。

构建是通过ant完成的,我已将以下元素添加到<javac>任务中:

<compilerarg value="-Werror"/>
<compilerarg value="-Xlint:unchecked,overrides"/>

正在遵循unchecked选项,但忽略了overrides选项。我还尝试将两个Xlint选项分成两个单独的<compilerarg>元素,但无济于事。我误解了这个选项的用途吗?

一个注意事项:这是MacOSX上的JDK6(10.6)。我可以遇到特定于OSX的错误吗?

2 个答案:

答案 0 :(得分:4)

我相信你误解了Xlint:overrides行为。

据我所知,启用此检查会导致编译器在遇到使用@Override注释但实际上未覆盖超类方法的方法时发出警告(或可能是错误)。但是,它不会检查所有重写的方法是否都正确注释。

编辑:刚试过它。当您在不覆盖超类方法的方法上指定@Override时,编译器将发出错误,无论是否有Xlint选项。

Oracle's website上的文档甚至没有提到Xlint:覆盖选项,所以我猜它没有实现。

答案 1 :(得分:1)

Xlint:覆盖比@Override更微妙。 @Override(正如Cameron Skinner指出的那样)如果它注释了一个实际上没有覆盖另一个方法的方法,它将导致编译器发出错误。但是,如果已经使用varargs参数标记了一个方法来覆盖另一个没有varargs参数但是使用数组的方法,则Xlint:覆盖选项会产生警告。这里有一个很好的解释:

http://marxsoftware.blogspot.com/2010/10/javacs-xlint-options.html