什么是最好的'NonNull'注释?
"最好的" 是指:
- 标准方式,例如未来的兼容性(例如由标准 JDK 支持等)
- IDE 的支持(在 Java 文档中显示以指示开发人员使用)
- 静态分析工具的支持,例如 FindBugs
- 运行时分析支持
以下是当前情况 - 欢迎提供进一步见解:
javax.validation.constraints.NotNull
(文档)
+ javax 包似乎具有未来兼容性
- 部分 JEE 而不是 JSE。在 JSE 中需要导入其他库.
- 不被静态分析工具支持(仅支持运行时验证)(文档)edu.umd.cs.findbugs.annotations.NonNull
- 外部库而不是javax
包
- 自 FindBugs 版本 3.X 起已弃用
+ 用于静态分析(由 FindBugs 和因此 Sonar 使用)(文档)javax.annotation.Nonnull
+ 用于静态分析(在 findbugs 中使用)
JSR-305 在 fb 邮件列表 中被表示为休眠/死亡/未知状态。即使直接询问作者 Bill Pugh,多年来也没有评论状态...(文档,有趣的演示文稿)org.eclipse.jdt.annotation_2.0.0
+ 用于静态分析(尽管不在 findbugs 中,在 eclipse 中)
- 专属于 eclipse(没有尝试独立使用它们)(文档)org.jetbrains.annotations.NotNull
+ 用于静态分析(尽管不在 findbugs 中,在 intelliJ 中)
- 专属于 IntelliJ(但也作为 jar 公开提供)lombok.NonNull
(文档)
+ 用于控制代码生成
- 专属注释android.support.annotation.NonNull
(文档)
+ 在 android studio 中进行静态分析
- 专属于 Android 的注释org.checkerframework.checker.nullness.qual.NonNull
(文档)
+ JSR308 实现是 Java8 的一部分(使您能够在代码的不同部分编写注释,但未引入新注释)
+ 用于静态代码(不适用于 Findbugs),以及运行时分析
- 外部库,然而似乎被 Java 人士认可。
目前我倾向于使用Checker Framework,但我期待其他见解...
[免责声明] 我知道这个问题已经在这里提出,但没有得到答案(或答案不正确/不完整/过时) [/免责声明]