@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 @   aaacarrot  阅读(1544)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示