使用 orelse()、orelseget() 或 orelsethrow() 方法从 optional 中安全取值。若需默认值,用 orelse();若默认值计算开销大,用 orelseget();若缺失值应视为错误,用 orelsethrow()。

orElse() 与 orElseGet() 的区别是什么
orElse() 的参数在调用时即被求值,而 orElseGet() 仅在值为空时才执行 Supplier 函数。对于简单常量,两者无性能差异;对于复杂对象创建,orElseGet() 更优。

import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<string> emptyOpt = Optional.empty();
// orElse: 总是计算默认值
String result1 = emptyOpt.orElse(getDefault());
System.out.println("Result1: " + result1);
// orElseGet: 仅当为空时计算
String result2 = emptyOpt.orElseGet(() -> getDefault());
System.out.println("Result2: " + result2);
}
private static String getDefault() {
System.out.println("Computing default...");
return "default";
}
}</string>
orElseThrow() 如何抛出异常
orElseThrow() 在值为空时抛出指定异常,否则返回值。它适用于必须存在值的场景,避免隐式返回 null 或默认值。
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型

import java.util.Optional;
import java.util.NoSuchElementException;
public class Main {
public static void main(String[] args) {
Optional<string> emptyOpt = Optional.empty();
try {
String value = emptyOpt.orElseThrow(() -> new NoSuchElementException("Value missing"));
System.out.println(value);
} catch (Exception e) {
System.out.println("Caught: " + e.getMessage());
}
}
}</string>
如果 Optional 包含的是 null 会怎样
Optional.ofNullable(null) 会创建一个空的 Optional,而非包含 null 的实例。因此,对空 Optional 调用 get() 会抛出 NoSuchElementException,而 orElse() 会返回默认值。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










