使用 Optional.orElseThrow() 作为 get() 更清晰的、表达意图的替代方案。
代码对比
✕ Java 8
// Risky: get() throws if empty, no clear intent
String value = optional.get();
// Verbose: supplier just for NoSuchElementException
String value = optional
.orElseThrow(NoSuchElementException::new);
✓ Java 10+
// Clear intent: throws NoSuchElementException if empty String value = optional.orElseThrow();
发现此代码有问题? 告诉我们。
为什么现代方式更好
自我描述
orElseThrow() 清楚地表明缺失是意外情况。
无代码异味
避免使用被认为不良实践的 get()。
意图明确
与 get() 不同,名称传达了语义。
旧方式
get() 或 orElseThrow(supplier)
现代方式
orElseThrow()
自 JDK
10
难度
入门
JDK 支持
无 supplier 的 Optional.orElseThrow()
可用
自 JDK 10 起可用(2018 年 3 月)。
工作原理
Optional.get() 被广泛认为是代码异味,因为它隐藏了意外缺失值时会抛出异常的意图。orElseThrow() 让这一意图明确。
相关文档