一、基本用法
- @NonNull 注解可以标注在方法、字段、参数之上,表示对应的值不能为空;
- @Nullable 注解可以标注在方法、字段、参数之上,表示对应的值可以为空;
@Nullable 注解可以使用在方法、属性、参数上,分别表示方法返回值可以为空、属性值可以为空、参数值可以为空。
如果可以传入 NULL 值,则标记为 @Nullable,如果不可以,则标注为 @NonNull。那么在做一些不安全严谨操作的编码时,这些注释会给我们一些警告。如下是我看 Spring 源码(DelegatingEntityResolver 类)时,发现用到的 @Nullable。
以上图片中关于修改的地方是把 Spring 源码里的空行删除了,至于为什么源码能被修改,是因为我把 Spring 源码下载到本地了,方便查看。
二、用法区别
关于 org.springframework.lang.Nullable 和 javax.annotation.Nullable 这两个注解有什么区别?用法有什么区别?
2.1 相同点
org.springframework.lang.Nullable
和 javax.annotation.Nullable
都是用来表示 Java 中的可空性注解。
2.2 不同点
javax.annotation.Nullable
是 JDK 9 引入的 Java 标准库中的一部分,而 org.springframework.lang.Nullable
是 Spring Framework 提供的,用于兼容不同的 Java 版本。
2.3 使用建议
如果你在使用 Spring Framework,并且你的项目中没有包含对应的 javax.annotation
库,你可能需要使用 org.springframework.lang.Nullable
。
- 如果你正在使用 Java 8 或更早版本,并且想要利用空值注解,可以添加 Spring Framework 的依赖来获取 org.springframework.lang.Nullable。
- 如果你正在使用 Java 9 或更新版本,可以直接使用 javax.annotation.Nullable。
- 如果你的项目同时需要兼容多个 Java 版本,你可能需要配置你的构建工具(例如 Maven 或 Gradle)来为不同的 Java 版本引入不同的依赖库。
例如,在 Maven 中,你可能需要配置 javax.annotation 的依赖条件,如下:
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
<scope>provided</scope>
</dependency>
请注意,javax.annotation
的依赖应该被标记为 provided
,因为它通常是 JDK 的一部分,并且不需要打包到最终的应用程序中。
完结!