Java 中的 Optional 是 Java 8 引入的一个容器类,用来显式表示一个值可能存在,也可能不存在。它的主要优势和设计初衷可以从以下几个方面理解:
传统写法:
User user = getUser();
String name = user.getName(); // 如果 user 为 null,直接 NPE
使用 Optional:
Optional<User> user = getUser();
String name = user.map(User::getName).orElse("未知");
✅ 优势:
null 带来的运行时崩溃// 传统方式:看方法签名根本不知道会不会返回 null
public User getUser() { ... }
// Optional 方式:一眼就知道可能没值
public Optional<User> getUser() { ... }
✅ 优势:
Optional<User> userOpt = getUser();
String city = userOpt
.map(User::getAddress)
.map(Address::getCity)
.orElse("未知城市");
✅ 优势:
if (x != null)传统写法:
if (user != null) {
if (user.getAddress() != null) {
return user.getAddress().getCity();
}
}
return "未知";
Optional 写法:
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("未知");
✅ 优势:
✅ 推荐用法:
public Optional<Order> findOrderById(String id)
❌ 不推荐:
public void process(Optional<Order> order)
原因:
Optional 反而增加调用复杂度❌ Optional 不是:
Optional<String> name)✅ Optional 是:
Optional 的最大优势,不是“避免 null”,而是“让 null 变得可见、可控、可优雅地处理”。
如果你愿意,我也可以:
Optional vs null免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。