You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK21(2023年)中Java应使用哪个@Nullable注解?

关于JDK17/JDK21中@Nullable注解的选择

核心结论

优先使用jakarta.annotation.Nullable,而非旧的javax.annotation.Nullable,同时可结合项目依赖的静态分析工具/IDE生态保持注解一致性。

注解的版本与迁移背景

  • javax.annotation.Nullable最早源自JSR-250规范,属于Java EE时代的API,JDK本身从未内置该注解。它的引入版本对应Java EE 5,依赖包为javax.annotation:javax.annotation-api:1.3.2。
  • 随着Java EE迁移至Jakarta EE,原javax.*命名空间的注解全部迁移到jakarta.*下,jakarta.annotation.Nullable是官方替代版本,从Jakarta EE 9开始正式启用,完全兼容JDK17及以上版本(包括JDK21),且处于持续维护状态。
  • JDK本身没有内置官方的@Nullable注解,Java的空值检查主要依赖静态分析工具(如SpotBugs、Checkstyle)或IDE(IntelliJ IDEA、Eclipse)的支持,这些工具大多同时兼容javax和jakarta版本的注解,但jakarta版本是当前生态的标准方向。

不同场景的选择建议

1. 普通Java项目(非EE)

直接引入Jakarta Annotations API依赖(以Maven为例):

<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.1</version>
    <scope>provided</scope>
</dependency>

导入路径:import jakarta.annotation.Nullable;
该版本完全适配JDK17和JDK21,是当前最标准的选择。

2. 遗留Java EE项目

若项目暂时无法迁移至Jakarta EE,javax.annotation.Nullable仍可使用,但需注意:它的依赖包已停止维护,未来JDK版本可能出现兼容性问题,建议逐步迁移到jakarta版本。

3. 结合生态工具使用

如果项目已依赖特定生态(如Spring、IntelliJ IDEA的静态检查),可以继续使用对应生态的@Nullable注解(如org.springframework.lang.Nullable、org.jetbrains.annotations.Nullable),但需保持项目内注解的一致性,避免混用。

关键注意点

  • JDK17和JDK21均未内置@Nullable相关注解,必须依赖第三方API包。
  • 选择jakarta.annotation.Nullable的核心原因是它属于Jakarta EE官方规范的延续,是当前Java生态的标准注解,具备更好的兼容性和未来适配性。

内容的提问来源于stack exchange,提问作者Paul Verest on LinkedIn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:57:19