代码对比
✕ Java 8
Optional<User> user = findUser(id);
if (user.isPresent()) {
greet(user.get());
} else {
handleMissing();
}
✓ Java 9+
findUser(id).ifPresentOrElse(
this::greet,
this::handleMissing
);
发现此代码有问题? 告诉我们。
为什么现代方式更好
单个表达式
两种情况在一次方法调用中处理。
声明式
直接表达存在和缺失两种处理路径。
无 isPresent() 检查
避免手动 isPresent() + get() 模式。
旧方式
Optional 上的 if/else
现代方式
ifPresentOrElse()
自 JDK
9
难度
入门
JDK 支持
Optional.ifPresentOrElse()
可用
自 JDK 9 起广泛可用(2017 年 9 月)
工作原理
ifPresentOrElse() 接受一个用于存在情况的 Consumer 和一个用于缺失情况的 Runnable。这消除了对 Optional 进行 if/else 的需要。
相关文档