@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 的用法了。它并不能防止或避免空指针,但可以更早地进行判断,一个空指针的触发机制(时间)问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南