使用optional.ofnullable(obj).ifpresent(action)可一行实现“对象非空即执行”,避免空指针;其基于consumer接口,仅在值非空时调用,不返回结果,适用于无返回值的副作用操作。

直接用 Optional.ofNullable(obj).ifPresent(action) 即可实现“对象非空即执行”的一行逻辑,无需 if 判断,也避免空指针。
核心写法与原理
ifPresent() 是 Optional 的终端操作方法,只在内部值非空时才调用传入的 Consumer。它本身不返回值(void),天然适合“有则执行、无则跳过”的场景。
-
基础模板:
Optional.ofNullable(可能为 null 的对象).ifPresent(要执行的操作); -
注意:必须用
ofNullable(),不能用of(),否则 null 会抛NullPointerException -
操作类型:参数是
Consumer<t></t>,支持方法引用、Lambda 或已有 Consumer 实例
常见实用写法示例
✅ 安全调用实例方法:
Optional.ofNullable(user).ifPresent(u -> System.out.println(u.getName()));
✅ 复用已有方法(方法引用):
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
Optional.ofNullable(config).ifPresent(this::loadFromConfig);
✅ 更新集合或状态(无返回值操作):
Optional.ofNullable(orderId).ifPresent(orders::remove);
对比传统写法,优势在哪?
传统方式需显式判空,代码冗长且易漏:
if (user != null) {
System.out.println(user.getName());
}
而 Optional 写法更简洁、意图更明确,且天然防御 NPE;尤其在链式调用或函数式风格中,可与其他 Optional 操作(如 map、filter)自然衔接。
注意事项与边界情况
⚠️ 不适用于需要返回值或抛异常的场景 —— ifPresent() 是消费型操作,无法中断流程或获取结果。
- 若需“非空则返回某值”,改用
map().orElse(...) - 若需“非空则计算并可能抛异常”,建议用
if (obj != null) { ... }显式控制 - 避免在
ifPresent()中写复杂多行逻辑,保持语义清晰;必要时提取为独立方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










