news 2026/4/18 5:41:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:25:00

已经 Push 到远程的提交,如何修改 Commit 信息?

在 IDEA 中写完了新增各种工具类的代码,完成了 Commit 和 Push,代码已经到了 GitHub远程仓库。 继续写着下一个功能的代码,突然,我发现刚才的Commit Message少写了一个已经完成的功能实现。 此时,我的工作区里已经有…

作者头像 李华
网站建设 2026/4/18 1:12:54

基于Web的求职招聘系统的设计与实现开题报告 springboot和vue

目录技术选型背景Spring Boot后端框架Vue.js前端框架系统架构设计预期实现功能项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型背景 现代求职招聘系统需要高效、可扩展的技术架构。Spring Boot与V…

作者头像 李华
网站建设 2026/4/18 6:35:31

照着用就行:更贴合MBA的降AI率软件,千笔AI VS 万方智搜AI

在AI技术迅速发展的今天,越来越多的MBA学生和研究人员开始借助AI工具辅助论文写作,以提高效率、优化内容。然而,随着学术审核标准的不断提升,AI生成内容的痕迹越来越容易被识别,导致论文出现“AI率超标”问题&#xff…

作者头像 李华
网站建设 2026/4/18 6:36:51

1. T600化学镀锡1.0 - 1.2um镀层厚度的性能影

T600化学镀锡1.0 - 1.2um镀层厚度的性能影响技术参数解读在电子电镀与表面处理行业,镀层厚度是影响产品性能的关键因素之一。T600化学镀锡的镀层厚度为1.0 - 1.2um,这一厚度范围在满足IPC或相关行业标准方面具有重要意义。从可焊性角度来看,据…

作者头像 李华
网站建设 2026/4/18 6:23:07

2026年大模型训练六大强化学习算法全解析:从PPO到ARPO,一篇看懂

1. PPO (Proximal Policy Optimization) 核心标签: 经典基石 / 稳定性之王 / RL入门必修 **一句话介绍:**虽然是2017年提出的经典算法,但在2025年依然是许多通用任务的默认首选。它就像是自动驾驶里的“定速巡航”,不求最快&…

作者头像 李华
网站建设 2026/4/18 7:36:21

计算机毕业设计之基于nodejs的校园食堂订餐系统

近年来,科技飞速发展,在经济全球化的背景之下,互联网技术将进一步提高社会综合发展的效率和速度,互联网技术也会涉及到各个领域,而校园食堂订餐系统在网络背景下有着无法忽视的作用。安卓APP的开发是一个不断优化的过程…

作者头像 李华