简短结论先说:Optional 本身并不能“自动解决”空指针(NullPointerException),它只是一个工具,用来更安全地表达“可能为空的值”,并强制你在取值时处理为空的情况。
下面分几点说清楚:
.get() 导致 NPEOptional<String> opt = Optional.ofNullable(getName());
String name = opt.orElse("default");
String upper = opt.map(String::toUpperCase).orElse("");
相比:
String name = getName().toUpperCase(); // 可能 NPE
❌ 误用反而更危险
opt.get(); // 如果为空,直接抛 NoSuchElementException
❌ 用 Optional 当字段 / 方法参数
class User {
Optional<String> name; // 不推荐
}
→ 增加复杂度,不如直接校验
❌ 以为 Optional 能防止所有 NPE
Optional<User> u = Optional.ofNullable(getUser());
u.get().getAddress().getCity(); // 照样 NPE
✅ 用于返回值,表示“可能没有结果”
✅ 配合 orElse / orElseGet / ifPresent / map 使用
✅ 不在底层模型、DTO、参数中滥用
示例:
public Optional<Order> findOrder(Long id) {
return Optional.ofNullable(dao.get(id));
}
@NotNull)Optional 不是空指针的银弹,而是让你“不得不面对空”的约束工具。
如果你愿意,我可以给你几个真实业务中的 Optional 正确 / 错误用法对比。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。