当前位置: 首页 > 面试题库 >

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

东郭思远
2023-03-14
问题内容

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


问题答案:

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



 类似资料:
  • 问题内容: 使用Java 注释的最佳实践是什么?为什么? 用注解标记每个覆盖的方法似乎是过大的。是否存在某些编程情况要求使用和其他不应该使用的情况? 问题答案: 每次你重写一种方法都有两个好处时使用它。这样做是为了使你能够利用编译器检查的优势,以确保你认为自己确实覆盖了某个方法。这样,如果你犯了拼写错误的方法名称或不正确匹配参数的常见错误,将会警告你方法实际上并没有像你认为的那样覆盖。其次,它使你

  • 问题内容: 我的问题是非常基本的,为什么我们人们使用注释,此注释的重要性是什么? 在旧的JDK中,为什么它不显示为警告,但是在最新的JDK中,则需要“为什么..”? 问题答案: 假设您有: 您 确实 打算覆盖,但是由于签名中的错误,它不是这样做的。如果使用,则可以让编译器检测故障。它 还会 向任何 阅读 代码的人表明这将覆盖现有方法或实现接口-为他们提供有关当前行为以及重命名该方法可能产生的影响的

  • 问题内容: 我有一个现有项目,该项目使用@Override的方法会覆盖接口方法,而不是超类方法。我无法在代码中更改它,但是我希望Eclpse不再抱怨注释,因为我仍然可以使用Maven进行构建。 我将如何禁用此错误? 注意:由于项目要求,我需要针对Java 1.5进行编译。 问题答案: 在实现接口声明的方法的方法上使用注释仅从Java 6起有效。这是Java 5中的错误。 确保将你的IDE项目设置为

  • 问题内容: 是否有一个静态分析工具可以在IDE外部运行一致地强制使用@Override注释?CheckStyle具有MissingOverride检查,但仅适用于使用@inheritDoc Javadoc标记的方法。我正在寻找一种可以在连续集成计算机上的新构建配置中运行的工具。 问题答案: 一种方法是使用TeamCity的“检查”运行器。我不确定它是否真的可以在IDE之外运行,因为它是在Intel

  • 是否有任何方法可以重用UserController方法,只需添加不同的安全性预授权,而无需为管理员重写这些方法?

  • 问题内容: 在Java或Android中,有@Override注释。这是什么意思?我发现它是在方法来自子类或继承接口的方法时使用的,我想进一步了解,其他是@SuppressWarnings及其Anonation,如果是的话,java使用了多少注释以及用于什么目的。 问题答案: 这个问题在这里也很简洁地得到了回答: Android@Override用法 这是一个注释,可以用来告诉编译器和IDE,您打