这个问题我应该使用哪个@NotNull Java注释?已经过时且有些基于观点。自那时以来,Java 8和更新的IDE已经出现。
虽然Java 8通过整合JSR 308允许类型注释,但它本身并没有提供任何注释。来自Josh Juneau的《解释JSR 308:Java类型注释》的内容:
JSR 308, Java类型注释已经作为Java SE 8的一部分被纳入。...
编译器检查器可以编写来验证带注释的代码,通过在代码不满足某些要求时生成编译器警告来强制执行规则。Java SE 8没有提供默认的类型检查框架,但可以编写自定义注释和处理器进行类型检查。还有许多可下载的类型检查框架,可以用作Java编译器的插件,以检查并强制执行已注释的类型。类型检查框架包括类型注释定义和一个或多个可插拔模块,与编译器一起用于注释处理。
只考虑提供至少某种类型的@CanBeNull和@CannotBeNull解决方案,我找到了以下信息(可能不准确):
- Eclipse的JDT Null分析使用
org.eclipse.jdt.annotation
。其他IDE有它们各自的包。使用JSR 308,并且仍然支持Java 8之前的注释。 - FindBug使用
javax.annotation
。虽然它没有集成到Oracle的API中,但由于某种原因它仍然使用javax
域,这意味着它确实在使用休眠的JSR 305,而不是使用Java 8的类型注释。 - Checker Framework使用
org.checkerframework.checker.nullness
。使用JSR 308。 - JavaEE的
javax.validation.constraints
。不知道它使用什么,但无论如何都没有@CanBeNull
。
以上选项之间的实际区别是什么?是否存在(即将出现)标准,还是打算让每个人编写自己的分析框架?