使用哪种@NonNull Java 注释
什么是最好的“非空”注释?
“最佳”在
- 标准方式,例如未来证明(例如,标准jdk的支持等)
- 支持IDE(显示在java文档中以指示开发人员的用法)
- 由静态分析工具(如 findbugs)提供支持
- 支持运行时分析
以下是世界目前的样子 - 任何进一步的见解都值得赞赏:
javax.validation.constraints.NotNull
(Docs)
+ javax package 因此似乎面向
未来 - JEE 的一部分不是 JSE。在 JSE 中,需要导入额外的库。
- 静态分析工具不支持(仅限运行时验证)(docs)edu.umd.cs.findbugs.annotations.NonNull
- 外部库而不是软件包
- 自 findbugs 版本 3.X
+ 用于静态分析(由 findbugs 和 Sonar)以来已弃用javax
(docs)javax.annotation.Nonnull
+ 用于静态分析(在 findbugs 中)
- JSR-305 处于休眠/死亡/未知状态,如 fb 邮件列表所示。作者比尔·皮尤(Bill Pugh)即使被直接问到,多年来也没有评论过该州......(文档,有趣的演示)org.eclipse.jdt.annotation_2.0.0
+用于静态分析(虽然在eclipse中而不是在findbugs中)
- 专有的eclipse(没有尝试单独使用它们)(docs)org.jetbrains.annotations.NotNull
+ 用于静态分析(虽然在 intelliJ 中而不是在 findbugs 中)
- IntelliJ 专有的(但也作为 jar 公开提供)龙目岛。NonNull
(docs)
+ 用于控制代码生成
- 专有注释android.support.annotation.NonNull
(docs)
+ android studio
中的静态分析 - android 特定的专有注释org.checkerframework.checker.nullness.qual.NonNull
(docs)
+ JSR308 实现,这是 Java8 的一部分(它确实引入了在代码的不同部分编写注释的能力,但没有引入新的注释)
+ 用于静态代码(虽然不是 findbugs)和运行时分析
- 但是外部库似乎得到了 Java 人员的认可
目前,我会倾向于Checker框架,但我期待其他观点...
[免责声明]我知道这个问题已经在这里被问过了,但是没有得到回答(或者答案是错误的/不完整的/过时的)[/免责声明]