Java中Optional骚气猜疑链

你需要调用其他人写的方法:

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在自己方法内以及链式处理还是挺好用的。


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍