当前位置: 首页 > news >正文

SpringBoot4.0新特性-Null-safety消灭空指针

核心目标

该机制的核心目标就是通过在编译时进行静态代码检查,防止运行时抛出空指针异常。SpringBoot4.0默认集成JSpecify框架,支持使用JSpecify注解来声明API、字段及相关类型的可空性。

举个例子,现在有一个接口和实现类:

public interface TokenExtractorService { String extractToken(String input); } @Service public class TokenExtractorServiceImpl implements TokenExtractorService { @Override public String extractToken(String input) { return input; } }

我们想要在编译期就能表达:入参不允许为null,返回允许为null,该如何来做呢?

可空性设置

我们可以使用@NonNull@Nullable注解来说明这些类型的可空性。具体来说可以有两种方式,显式设置和隐式统一设置。

显式设置可空性

只需要在参数和返回上分别添加对应的注解即可:

public interface TokenExtractorService { @Nullable String extractToken(@NonNull String input); } @Service public class TokenExtractorServiceImpl implements TokenExtractorService { @Override public @Nullable String extractToken(@NonNull String input) { return input; } }
  • @NonNull:不能为空
  • @Nullable: 可以为空

加完这些标记以后,当我们调用这个方法的时候,IDEA就会有对应的错误提示:

@GetMapping("/demo") public String demo(){ String token = tokenExtractorService.extractToken(null); return token.toUpperCase(); }

以上代码,IDEA会给出2个警告:

隐式设置可空性

大多数情况下,我们一般默认这些参数、返回、字段、类型都是非空的,因此只需要明确的说明可空即可,因此我们还可以在包级别统一设置默认的可空性,这个可以借助package-info.java来实现。

首先在service包下面添加package-info.java

@NullMarked package com.github.xjs.service; import org.jspecify.annotations.NullMarked;
  • @NullMarkedcom.github.xjs.service这个包下面所有的参数、返回、字段、类型默认都是不允许为空
  • @NullUnmarked:默认都允许为空,一般很少用

此时,就可以删除代码中的@NonNull注解,只保留@Nullable即可:

public interface TokenExtractorService { @Nullable String extractToken(String input); } @Service public class TokenExtractorServiceImpl implements TokenExtractorService { @Override public @Nullable String extractToken(String input) { return input; } }
http://www.jsqmd.com/news/345732/

相关文章:

  • 分析恒博通讯设备公司 旗下产品价格贵不贵 - 工业品网
  • 还不知道怎么学大模型?别再闷头瞎学了,看我五分钟,顶你两小时(附教程)
  • 从LLM到运筹优化:四大AI模型分类与应用场景全解析
  • 计算机毕业设计之springboot大学生综测可视化系统
  • 开题报告 springboot和vue-基于SSH框架的寄卖管理系统的设计与实现
  • 2026年热门的吊牌灯箱,停车场吊牌灯箱,商场吊牌灯箱厂家用户好评榜单 - 品牌鉴赏师
  • 粉末电导率测试与电阻率原理、方法及应用
  • 开题报告 springboot和vue-天气预报软件
  • 2026跨境电商适配园区推荐:揭秘五大孵化与办公优选地 - 品牌2025
  • CAXA二次开发
  • 建议收藏!AI大模型时代的高薪机会:10大岗位薪资与职业发展指南(附学习资源)_AI大模型的前十热门岗位薪资盘点!
  • nginx 编译选项说明
  • 本周更新|优化及缺陷修复
  • 基于云计算的实习管理系统设计与实现
  • 2026年诚信的精神堡垒标识牌,户外精神堡垒厂家选购参考汇总 - 品牌鉴赏师
  • 浙江自动锁螺丝机推荐,宏海机器人的性价比怎么样? - myqiye
  • 2026跨境电商办公室租赁怎么选不踩坑?关键指标+注意事项,5大优质产业园推荐 - 品牌2025
  • 基于云计算的微课教学资源共享平台建设_开题报告 springboot和vue_
  • 2026注浆机;灌浆泵;湿喷机;喷浆机;喷涂机行业测评:五家企业综合对比及评价 - 深度智识库
  • 2026年山东临沂树脂瓦厂家专业推荐:波浪型树脂瓦、FRP采光瓦、‌防腐树脂瓦、‌合成树脂瓦厂家、ASA合成树脂瓦 - 海棠依旧大
  • 基于Web的求职招聘系统的设计与实现开题报告 springboot和vue
  • 2026年好的3C认证办理服务公司排名及服务特色盘点 - 工业品牌热点
  • 求推荐靠谱厨师学校,沈阳新东方火锅专业口碑排名 - 工业推荐榜
  • 2026年法兰V型球阀制造企业排名,前十名揭晓 - mypinpai
  • 创业第一步,办公室别踩坑!2026跨境电商孵化园区挑选秘籍与5大推荐 - 品牌2025
  • 2026年天津性价比高的五金批发零售公司盘点,选五金批发零售服务哪家好 - 工业品网
  • 2026国产营养秤品牌盘点及选购指南 - 一搜百应
  • 2026跨境电商孵化园区办公室租赁挑选避坑指南附租赁经验分享及5大优质园区推荐 - 品牌2025
  • 2026年可靠的水上浮桥浮筒餐厅,浮桥浮筒水上泳池,水上浮桥浮筒舞台厂家选择指南 - 品牌鉴赏师
  • 点成干货 | 基于人字形混合芯片的脂质纳米颗粒微流控制备技术