Which @NonNull Java annotation to use
什么是最好的'NonNull'注释?
意义上的"最佳"
- 标准方式例如未来的证明(例如标准jdk的支持等)
- IDE的支持(在java doc中显示以指示开发人员的用法)
- 由findbugs等静态分析工具提供支持
- 支持运行时分析
以下是世界目前的样子 - 任何进一步的见解都值得赞赏:
-
javax.validation.constraints.NotNull (文件)
因此,+ javax包似乎具有前瞻性
- 部分JEE不是JSE。在JSE中需要导入额外的库。
- 静态分析工具不支持(仅限运行时验证) -
edu.umd.cs.findbugs.annotations.NonNull s>(docs)
- 外部库而不是javax 包
- 自findbugs版本3.X后弃用
+用于静态分析(由findbugs和因此Sonar) -
javax.annotation.Nonnull s>(docs)
+用于静态分析(在findbugs中)
- JSR-305处于休眠/死亡/未知状态,如fb邮件列表所示。提交人Bill Pugh,即使直接被问到,多年来也没有对该州进行评论...... -
org.eclipse.jdt.annotation_2.0.0 s>(文档,有趣的演示文稿)
+用于静态分析(虽然不是在findbugs中的eclipse)
- 专有的eclipse(没有尝试独立使用它们) -
org.jetbrains.annotations.NotNull s>(docs)
+用于静态分析(虽然不是在findbugs中的intelliJ)
- IntelliJ专有(但也可公开作为jar) -
<5233>(文档)
+用于控制代码生成
- 专有注释 -
android.support.annotation.NonNull (docs)
在android studio中进行静态分析
- 特定于android的专有注释 -
org.checkerframework.checker.nullness.qual.NonNull (docs)
+ JSR308实现是Java8的一部分(它确实引入了在代码的不同部分编写注释的功能,但没有引入新的注释)
+用于静态代码(虽然不是findbugs)和运行时分析
- 外部lib似乎得到了java人的支持
目前我倾向于Checker Framework,但我期待其他观点......
[免责声明]我知道问题已经在这里被问到但是没有回答(或答案是错误/不完整/过时)
[/放弃]
没有标准的
为了防范未来,最重要的考虑因素是注释是类型注释还是声明注释。因为
您可以通过查看注释定义上的
唯一的缺点是使用类型注释需要使用Java 8编译器。 Checker Framework具有允许包含其注释的代码由Java 7编译器编译的机制。