第七章节介绍Null-safety,作用是在开发阶段添加是否可以为NULL的约束条件,在运行阶段避免抛出空指针异常。
1、注解
原著中介绍了4个注解。
- @NonNull:用于添加对象属性,方法参数,方法返回值不为NULL的约束条件。
// 对象属性上
@NonNull
private String userName;
// 方法参数上
public static void testLiteralExp(@NonNull String str) {}
// 方法返回值上
public @NonNull String test(){}
2.@Nullable:与@NonNull作用刚好相反,属性,方法参数,返回值可以为NULL
3.@NonNullApi:当前包下面的所有方法参数和返回值都不可以为NULL,可以被@Nullable覆盖。
@org.springframework.lang.NonNullApi package learn.test;
4.@NonNullField:当前包下面的对象的所有字段都不可以为NULL,可以被@Nullable覆盖。
2、IDE
当字段,方法参数,方法返回值添加上这些注解时,IDE会有相应的提示。本文以Eclipse为例演示具体的步骤
- 第一步:打开Window---->preferences----->Java------>Complier---->Error/Warnings
找到Null analysis,展开,点击enable annotation-based null analysis。

2.在下面的use default annotation for null specifications把对勾去掉,点击configure,配置如下图,

3.点击Apply,重新编译即可看到效果。

3、JSR305
JSR305中也有相同功能的注解,而且还有很多其他的注解,使用这些注解首先必须引入jsr305的jar包
<!-- https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305 -->
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
</dependency>
编写代码时,再次使用NonNull注解时,会发现有javax.annotation.NonNull。
import javax.annotation.Nonnull;
要使编译器提示,需要重新配置第二步,将注解修改为javax.annotation.NonNull等注解