objects.requirenonnull()是java 7引入的参数非空校验工具,用于方法入口快速抛出带消息的nullpointerexception,提升健壮性;支持单参数、多参数分别校验及构造器中使用,但不适用于null为合法业务值的场景。

Objects.requireNonNull() 是 Java 7 引入的工具方法,用于在方法入口快速校验参数是否为 null,一旦为 null 就立即抛出 NullPointerException,避免空指针在后续逻辑中隐式爆发,提升代码健壮性和可调试性。
基础用法:单参数校验并抛出默认异常
最常见写法是直接传入待检查的引用变量:
public void processUser(User user) {
Objects.requireNonNull(user, "user must not be null");
// 后续逻辑安全使用 user
System.out.println(user.getName());
}
若 user 为 null,会立即抛出带指定消息的 NullPointerException。不传消息时,默认提示为 "null"。
校验多个参数:链式调用或逐个检查
一个方法有多个引用参数时,可分别校验(推荐):
- 清晰标明哪个参数为空,便于定位问题
- 避免因前一个参数为空导致后续校验被跳过
示例:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
public void createOrder(User buyer, Product item, Address shipping) {
Objects.requireNonNull(buyer, "buyer is required");
Objects.requireNonNull(item, "item is required");
Objects.requireNonNull(shipping, "shipping address is required");
// 安全执行业务逻辑
}
配合 Lambda 或构造函数:提前拦截非法对象构建
在构造器中使用,可防止对象处于不合法状态:
public class Order {
private final User buyer;
private final Product item;
public Order(User buyer, Product item) {
this.buyer = Objects.requireNonNull(buyer, "buyer cannot be null");
this.item = Objects.requireNonNull(item, "item cannot be null");
}
}
也可用于方法引用或 Stream 操作前的预处理(如 map(u -> Objects.requireNonNull(u))),但需谨慎——通常应在校验阶段而非转换阶段做空值拦截。
注意点:它不替代业务逻辑中的空值语义判断
requireNonNull() 表达的是“此处绝不接受 null”,属于契约式编程(Design by Contract)。它不是用来处理“null 是合法业务值”的场景。例如:
- 数据库字段允许为空 → 应用层需显式判断
if (user == null) { ... },而不是强制非空 - API 参数可选 → 应使用
Optional或单独字段标识是否存在,而非盲目 require
滥用会导致本该优雅处理的可选值变成崩溃,反而降低系统韧性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










