温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Optional 怎么取值

发布时间:2026-10-09 04:27:53 来源:亿速云 阅读:103 作者:小樊 栏目:编程语言

在 Java 中,Optional 是用来避免 NullPointerException 的容器类。取值的方式有多种,取决于你希望如何处理“可能为空”的情况。


1️⃣ 最不推荐:get()

Optional<String> opt = Optional.of("hello");
String value = opt.get();

⚠️ 如果值为空,会抛出 NoSuchElementException
➡️ 不推荐直接使用


2️⃣ 推荐方式一:orElse(有默认值)

String value = opt.orElse("default");

✅ 值为空时返回默认值
✅ 不会抛异常


3️⃣ 推荐方式二:orElseGet(懒加载)

String value = opt.orElseGet(() -> "default");

✅ 只有值为空时才执行 lambda
✅ 性能更好(适合创建成本高的默认值)


4️⃣ 推荐方式三:orElseThrow(必须存在)

String value = opt.orElseThrow(() -> new RuntimeException("值不存在"));

✅ 值为空时主动抛异常
✅ 适合“必须有值”的场景


5️⃣ 推荐方式四:ifPresent(有值才处理)

opt.ifPresent(v -> System.out.println(v));

✅ 不为空才执行逻辑
✅ 不需要显式取值


6️⃣ 函数式处理方式:map / flatMap

Optional<Integer> len = opt.map(String::length);

✅ 有值时转换
✅ 为空时直接返回 Optional.empty()


7️⃣ 判空(不取值)

if (opt.isPresent()) {
    String value = opt.get();
}

✅ 可用,但一般推荐用 ifPresent


✅ 使用建议总结

场景 推荐方式
有默认值 orElse / orElseGet
必须有值 orElseThrow
有值才处理 ifPresent
转换值 map
不确定 不要直接用 get()

如果你有具体使用场景(比如从 Map、方法返回值、Stream 里取),我可以给你更合适的写法。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手