@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 的用法了。它并不能防止或避免空指针,但可以更早地进行判断,一个空指针的触发机制(时间)问题


image

image

posted @ 2023-01-04 18:33  aaacarrot  阅读(1266)  评论(0编辑  收藏  举报