在 Java 中,Optional 是用来避免 NullPointerException 的容器类。取值的方式有多种,取决于你希望如何处理“可能为空”的情况。
get()Optional<String> opt = Optional.of("hello");
String value = opt.get();
⚠️ 如果值为空,会抛出 NoSuchElementException
➡️ 不推荐直接使用
orElse(有默认值)String value = opt.orElse("default");
✅ 值为空时返回默认值
✅ 不会抛异常
orElseGet(懒加载)String value = opt.orElseGet(() -> "default");
✅ 只有值为空时才执行 lambda
✅ 性能更好(适合创建成本高的默认值)
orElseThrow(必须存在)String value = opt.orElseThrow(() -> new RuntimeException("值不存在"));
✅ 值为空时主动抛异常
✅ 适合“必须有值”的场景
ifPresent(有值才处理)opt.ifPresent(v -> System.out.println(v));
✅ 不为空才执行逻辑
✅ 不需要显式取值
map / flatMapOptional<Integer> len = opt.map(String::length);
✅ 有值时转换
✅ 为空时直接返回 Optional.empty()
if (opt.isPresent()) {
String value = opt.get();
}
✅ 可用,但一般推荐用 ifPresent
| 场景 | 推荐方式 |
|---|---|
| 有默认值 | orElse / orElseGet |
| 必须有值 | orElseThrow |
| 有值才处理 | ifPresent |
| 转换值 | map |
| 不确定 | 不要直接用 get() |
如果你有具体使用场景(比如从 Map、方法返回值、Stream 里取),我可以给你更合适的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。