简短结论:Optional 不能完全替代判空(null 判断),但可以让“是否缺失值”这件事更明确、更安全、更函数式。
下面分层说清楚。
主要是方法返回值可能为空时,避免调用方直接 if (x != null)。
User user = getUserById(id);
if (user != null) {
System.out.println(user.getName());
}
Optional<User> userOpt = getUserById(id);
userOpt.ifPresent(u -> System.out.println(u.getName()));
或者:
String name = getUserById(id)
.map(User::getName)
.orElse("unknown");
✅ 好处:
// 不推荐
void foo(Optional<User> user) { }
原因:
null✅ 正确做法:
void foo(User user) {
Objects.requireNonNull(user);
}
if (list == null || list.isEmpty()) { }
❌ 不要写成:
Optional.ofNullable(list).filter(l -> !l.isEmpty())
太绕,且没收益。
if (x != null) return x;
return defaultX;
比:
return Optional.ofNullable(x).orElse(defaultX);
更直接、性能更好。
Optional 不是“判空替代器”,而是“缺失值语义封装器”。
用得好:代码更安全、更清晰
用错地方:代码更绕、更慢、更难维护
如果你愿意,我可以帮你把现有 if-null 代码改成 Optional 版本,并指出哪些该改、哪些不该改。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。