“Optional” 是否适合所有场景,答案很明确:不适合,也不是所有地方都该用。
下面从几个角度来看它“适合”和“不适合”的场景。
这是 Optional 的核心用途,比如:
Optional<User> user = userRepository.findById(id);
相比返回 null,Optional 能强制调用方思考“空”的情况。
Optional 最适合用在返回类型上,明确告诉调用者:结果可能不存在。
配合 map、flatMap、filter 很自然:
Optional<String> name = userOpt.map(User::getName);
class User {
private Optional<String> email; // 不推荐
}
问题:
✅ 更好做法:
private String email; // 允许 null 或必填
void save(Optional<User> user) // 不推荐
问题:
✅ 更好做法:
void save(User user)
Optional 不是 null 的银弹。
错误示例:
if (opt.isPresent()) {
doSomething(opt.get());
}
这和不写 Optional 没本质区别,甚至更啰嗦。
Optional 是对象,有额外分配成本。在:
直接用 null 或基本类型更合适。
Optional 适合“返回值可能不存在”的场景,不适合作为字段、参数或性能敏感的底层数据表示。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。