【问题标题】:How to enforce usage of the @Override annotation? [closed]如何强制使用 @Override 注释? [关闭]
【发布时间】:2011-04-26 17:51:11
【问题描述】:

是否有一个静态分析工具可以一致地强制使用 @Override 注释,并且可以在 IDE 之外运行? CheckStyle 有一个 MissingOverride 检查,但它仅适用于使用 @inheritDoc Javadoc 标记的方法。我正在寻找一种可以在持续集成机器上以新的构建配置运行的工具。

【问题讨论】:

标签: java continuous-integration static-analysis


【解决方案1】:

PMD 现在有一个MissingOverride rule

PMD 或 Findbugs 呢? PMD 使您甚至可以编写自己的规则(如果它在默认规则集中不是一次性的)。

https://pmd.github.io/pmd-6.3.0/pmd_userdocs_extending_writing_pmd_rules.html

【讨论】:

  • FindBugs 进行字节码分析。 @Override 是否会进入字节码?
【解决方案2】:

我正在使用 Sonar,它给了我警告,但最重要的是我正在使用 eclipse(我的团队也是如此)并且我设置了一个选项“添加缺少的 @Overrides”以在保存操作时完成。

【讨论】:

  • 声纳只是一个报告——它不能强制执行任何事情。 eclipse可以从命令行运行吗?
  • @Craig P. Motlin 从命令行运行 eclipse 是可能的,但并不容易。在这里,您可以找到指向类似解决方案的链接。有人正在从命令行运行 eclipse 以强制执行代码样式格式:blogs.operationaldynamics.com/andrew/software/java-gnome/…。我个人不得不承认,添加缺失覆盖的规则在代码重构方面帮助了我很多。我首先将它应用于代码以查找所有覆盖,然后在更改一些基本方法后,我得到了可以修复的代码编译错误(这是我想要得到的)。
【解决方案3】:

一种方法是使用 TeamCity 的“Inspection”运行器。我不确定它是否真的有资格在 IDE 之外运行,因为它是在 IntelliJ 中配置的,并且它通过在 TeamCity 端以无头模式运行 IntelliJ 来工作。

【讨论】:

  • 如果你使用 IntelliJ IDEA,它有一个检查来做这件事,但默认情况下它是不启用的,你可以去设置>检查>缺少覆盖注释
  • 谢谢,这就是我在回答中提到的检查。
【解决方案4】:

Error Prone has a MissingOverride Pattern 似乎在编译时评估容易出错。默认情况下这是一个警告,但我将其配置为错误。

【讨论】:

  • 我刚刚测试了这个,效果很好。示例:BaseApplication.java:56: warning: [MissingOverride] run implements method in Application; expected @Override
【解决方案5】:

在 IntelliJ 2017 上,转到设置 -> 编辑器 -> 检查 -> 缺少 @Override 注释

image example 0 (no enough reputation to post images)

【讨论】:

  • 这会对 IDE 造成不必要的依赖。应该使用构建工具及其插件进行分析。
  • 这是选择的答案,我只是把如何在 intelliJ 2017 上配置检查,因为菜单自 2011 年以来发生了变化,无论如何,如果您认为我的回答值得反对,您应该保持一致并执行对于所有其他具有相同响应的 cmet 来说都是一样的。干杯。
  • 其他答案不是指特定于 IDE 的工具,而是指可以集成到构建过程中的工具,这些工具在理想情况下已经独立于 IDE,并且在添加强制执行@987654322 的工具后保持独立@注解。此外,您的方法不会强制执行注释,因为如果您在构建成功时不单击您提到的控件,它们就不存在。您正在提供一种解决方案来解决缺少注释的问题,这对于作为对其中一个答案的评论很有帮助。
猜你喜欢
  • 2013-07-20
  • 2013-06-29
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多