在 Java 8 中引入的 Optional<T> 主要用来更优雅、更安全地处理“可能为 null 的值”,避免空指针异常(NullPointerException,NPE),并让代码意图更清晰。
以前常见写法:
String city = user.getAddress().getCity();
如果 user、address 为 null,直接 NPE。
使用 Optional:
Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.ifPresent(System.out::println);
方法返回值用 Optional:
public Optional<User> findUserById(Long id)
调用方一眼就知道:这里可能查不到数据。
Optional.of(value); // 不允许 null
Optional.ofNullable(value);// 允许 null
Optional.empty(); // 空 Optional
optional.ifPresent(v -> System.out.println(v));
String value = optional.orElse("默认值");
String value2 = optional.orElseGet(() -> "计算默认值");
Optional.ofNullable(user)
.filter(u -> u.getAge() > 18)
.map(User::getName)
.ifPresent(System.out::println);
optional.ifPresentOrElse(
v -> System.out.println(v),
() -> System.out.println("没有值")
);
User user = optional.orElseThrow(() -> new RuntimeException("用户不存在"));
✅ 适合
Stream + Optional)null 判断❌ 不适合
Optional.get()(仍可能 NPE)Optional 不是“容器里的对象”,而是一种“可能为空的计算结果”的语义包装
它让代码:
如果你愿意,我也可以:
Optional 和 null 的真实案例Optional 在 Spring / Stream 中的最佳实践你想看哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。