你需要调用其他人写的方法:
Optional<User> queryById(Long id);
看到返回值是Optional,你觉得写queryById的这个家伙是懂行的,于是你这样调用:
userService.queryById(1L).ifPresent(user-> {
// ...
});
运行代码,喜提报错:
java.lang.NullPointerException
为什么用了Optional还是有空指针问题???带着疑问,你点开queryById的源码:
@Override
public Optional<User> queryById(Long id) {
return null;
}
自此之后,你不再信任来源不明的Optional对象:
Optional<User> optional = userService.queryById(1L);
if(optional != null) {
optional.ifPresent(user -> {
// ...
});
}
但你觉得Optional其实是个好东西,还是要利用起来:
Optional.ofNullable(userService.queryById(1L)).flatMap(object -> object).ifPresent(user -> {
// ...
});
看上去很优雅…可是,如果那个家伙没有拿Optional当返回值,你只需要:
User user = userService.queryById(1L);
if(user != null) {
//...
}
转自:Java8的Optional是不是鸡肋? - 勤奋的程序猿的回答 - 知乎
https://www.zhihu.com/question/382242885/answer/11944237286
不过还是得说一句,存在即合理,Optional.ofNullable在自己方法内以及链式处理还是挺好用的。