@NonNull 注解小记——非空判断的触发时机区别
背景
@NonNull: 关于这个注解,lombok 的一个注解,可以加在方法-入参,或构造函数上。
本以为加了这个参数,会自动判断(编译阶段)会判断,但发现并不是这个意思。因为在编译的时候,传个空的参数过来,它是不会有任何的报错提示的。
那这个东西有什么用呢?一度产生了怀疑。
直至,后来才突然醒觉,其实,这个注解,其实是用于调用时候,进行一种 对参数非空的“预判断”,如果参数空的,就马上把空指针抛出来,而不是等到执行方法的时候,再来报空指针错误。
上代码看看
import lombok.NonNull;
public class NotNullDemo {
public static void main(String[] args) {
checkNull(null);
}
public static Integer checkNull(@NonNull String param) {
System.out.println(param);
System.out.println(param);
System.out.println(param);
System.out.println(param);
System.out.println("参数长度是:" + param.length());
return param.length();
}
}
执行结果分析
- 如果在方法参数处加了 @NonNull,方法被调用的时候,会在方法入口处就报错,抛出空指针。这个时候并不会进入方法体里面。
- 如果在方法参数处没有加 @NonNull, 方法被调用的时候,方法体会执行,执行过程中,哪里报错就在哪里抛异常。
这样可能就会执行一些不必要的操作
嗯,这个就是 @NonNull 的用法了。它并不能防止或避免空指针,但可以更早地进行判断,一个空指针的触发机制(时间)问题