【发布时间】:2016-08-25 18:00:50
【问题描述】:
Which @NotNull Java annotation should I use? 的问题已经过时并且有点基于意见。从那以后,Java 8 和更新的 IDE 一起出现了。
虽然 Java 8 允许通过集成 JSR 308 来类型注释,但它不附带任何注释。来自JSR 308 Explained: Java Type Annotations by Josh Juneau:
JSR 308,Java 类型注释,已作为 Java SE 8 的一部分。
...
可以编写编译器检查器来验证带注释的代码,通过在代码不满足某些要求时生成编译器警告来执行规则。 Java SE 8 不提供默认的类型检查框架,但可以编写自定义注解和处理器来进行类型检查。还有许多类型检查框架可以下载,它们可以作为 Java 编译器的插件来检查和强制执行已注释的类型。类型检查框架包括类型注解定义和一个或多个与编译器一起用于注解处理的可插拔模块。
仅考虑提供至少某种@CanBeNull 和@CannotBeNull 的解决方案,我发现以下信息(可能是错误的):
-
Eclipse's JDT Null Analysis 的
org.eclipse.jdt.annotation。其他 IDE 有各自的软件包。使用 JSR 308,并且仍然支持 Java 8 之前的注释。 -
FindBug 的
javax.annotation。使用休眠的JSR 305,它似乎没有使用Java 8 的类型注释。尽管它没有集成到 Oracle 的 API 中,但出于某种原因,它仍然使用javax域,这意味着它确实如此。 -
Checker Framework 的
org.checkerframework.checker.nullness。使用 JSR 308。 - JavaEE 的
javax.validation.constraints。不知道用什么,反正没有@CanBeNull。
有些用于静态代码分析,有些用于运行时验证。
上述选项之间的实际区别是什么?是否有(将有)一个标准,还是每个人都可以编写自己的分析框架?
【问题讨论】:
标签: java standards code-analysis nullable non-nullable