Pau*_*est 7 java nullable java-21
截至 2023/JDK21,@NullableJava 中使用什么?
许多在线材料甚至没有提到要使用哪个导入。所以现在这些注释的出现顺序已经成为(黑暗的)历史了。
我希望得到一般性的答案并且来自信誉良好的来源(请引用文档)。对于 JDK21,有些文章也可以做到这一点。
例如javax.annotation.Nullable可以是优选的。但它是在什么版本中引入的呢?(我们使用JDK17,也许明年一些项目更新到JDK21)
在我看来,jakarta.annotation.Nullablejakarta.annotation -api最接近“标准”。旧的javax.annotation 存储库链接到其源,并且正如评论中指出的那样,流行的检查器框架将处理它。
就采用率而言,截至 2023 年 9 月,它出现在 github 上的约 30k 个文件javax.annotation.N中,但我猜随着更多 Servlet 项目迁移到规范的较新版本(目前匹配>1M 个文件,很难猜测有多少个),这个数字将会快速增长其中与 Servlet 相关以及其中有多少将被迁移)。
@Nullable2023年,注解的最佳选择@NonNull仍然是Checker框架。它是事实上的标准(import org.checkerframework.checker.nullness.qual...出现在GitHub 上的 75k 文件中),被最广泛的工具识别,是大多数其他空注释的超集,并且具有清晰、标准的语义。
该注释可用于多种目的。
您可以将其编写为简洁、精确的文档。
您可以使用工具来验证或启发式检查该文档。示例包括:
Checker Framework 的Nullness Checker是最全面的,可以配置为健全或宽松。Checker 框架还支持许多其他类型系统。
NullAway是一个更简单的工具,仅支持空值检查,并且运行速度比空值检查器更快。
好多其它的。
一些自动化测试框架在生成测试时尊重注释。
你的问题提到javax.annotation.Nullable. 该注释未经 Oracle 批准,也从未被授权使用javax命名空间(这样做违反了 Oracle Java 二进制许可证)。引入它的工具 FindBugs 已被放弃。
对于您的问题,Oracle 没有提供官方答案。JSR 305 的目标是定义这样的注释,但已被放弃(根据我与 Oracle Java 平台组首席架构师 Mark Reinhold 的对话),Oracle 对恢复它不感兴趣。每个@Nullable注释均由第三方库提供,并被javac. 注释只能由第三方工具(例如注释处理器)读取。