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