代码对比
✕ Java 8
Optional<Config> cfg = primary();
if (!cfg.isPresent()) {
cfg = secondary();
}
if (!cfg.isPresent()) {
cfg = defaults();
}
✓ Java 9+
Optional<Config> cfg = primary()
.or(this::secondary)
.or(this::defaults);
发现此代码有问题? 告诉我们。
为什么现代方式更好
可链式调用
在可读的管道中堆叠回退。
保持 Optional
返回 Optional<T> 而非 T,因此可以继续链式调用。
扁平
无嵌套的 isPresent() 检查。
旧方式
嵌套回退
现代方式
.or() 链
自 JDK
9
难度
中级
JDK 支持
Optional.or() 回退
可用
自 JDK 9 起广泛可用(2017 年 9 月)
工作原理
Optional.or() 在有值时返回原始 Optional,否则返回由提供的 Supplier 生成的另一个 Optional。与 orElse() 不同,它保持 Optional 类型。
相关文档