第七章节介绍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等注解