orElse()在Optional为空时返回指定默认值,否则返回实际值;其参数总会被立即求值,可能引发性能问题或副作用,应优先使用orElseGet(Supplier)避免无谓计算。

optional.orElse() 是 Java 8 引入的 Optional 类中用于提供默认值的方法:当 Optional 为空(empty())时,返回你指定的默认值;否则返回 Optional 中封装的实际值。
orElse() 的基本用法
它接收一个非 null 的参数作为默认值,无论这个值是字面量、变量还是方法调用结果(只要不抛异常):
-
Optional<string> opt = Optional.empty();</string>String result = opt.orElse("default"); // 返回 "default" -
Optional<integer> opt2 = Optional.of(42);</integer>int value = opt2.orElse(-1); // 返回 42
注意:orElse() 总是立即执行参数
即使 Optional 不为空,orElse() 的参数表达式也会被求值。比如:
-
Optional.of("hello").orElse(expensiveMethod());
此时expensiveMethod()依然会被调用,可能带来性能开销或副作用。 - 若想避免无谓计算,改用
orElseGet(Supplier)—— 它只在 Optional 为空时才执行 Supplier。
和 orElseGet()、orElseThrow() 的区别
三者都处理空值场景,但行为不同:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
-
orElse(T):传入固定值,**无条件执行参数求值**。 -
orElseGet(Supplier<t>)</t>:传入 Supplier,**仅在需要时才执行**,更安全高效。 -
orElseThrow():空时抛异常,适合必须有值的业务逻辑。
常见误用提醒
别把 orElse(null) 当成“兜底为空”,这会破坏 Optional 的初衷——它本意是帮你显式处理空值,而不是绕回去制造 null:
- ❌
String s = opt.orElse(null); // 失去 Optional 的保护意义 - ✅ 更好方式:
opt.orElse("N/A")或opt.map(String::trim).orElse("")
不复杂但容易忽略细节,用对 orElse() 能让代码更清晰、更健壮。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










