当我有一个类覆盖父类(super class)方法而不指定 @Override 注释时,我试图让我的 java 构建失败。
构建是通过 ant 完成的,我已将以下元素添加到我的 <javac>
任务中:
<compilerarg value="-Werror"/>
<compilerarg value="-Xlint:unchecked,overrides"/>
遵循
unchecked
选项,但忽略 overrides
选项。我还尝试将两个 Xlint
选项分成两个单独的 <compilerarg>
元素,但无济于事。我误解了这个选项的作用吗?注意:这是 MacOSX (10.6) 上的 JDK6。我会遇到特定于 OSX 的错误吗?
最佳答案
我相信您误解了 Xlint:overrides
行为。
据我所知,启用此检查将导致编译器在遇到使用 @Override
注释但实际上并未覆盖父类(super class)方法的方法时发出警告(或可能是错误)。但是,它不会检查所有重写的方法是否都被正确注释。
编辑:刚刚测试过。当您在不覆盖父类(super class)方法的方法上指定 @Override
时,无论是否使用 Xlint
选项,编译器都会发出错误消息。
Oracle's website 上的文档甚至没有提到 Xlint:overrides 选项,所以我猜它没有实现。