Java 8 Optional 的使用问题

2018-10-26 10:48:44 +08:00
 shazh520
for (Object param : params) {
    if (param == null) {
        throw new ParamException("缺少参数");
    }
}

像这样的非空判断,如果是换成一个包含 List 的 Optional 对象如何优雅的实现这个操作?

3254 次点击
所在节点    Java
14 条回复
beny2mor
2018-10-26 10:54:08 +08:00
Optional 不适合包 List。List 如果为空就表示“ empty ”这个含义。 应该不存在接口会返回 null 值或空 List 吧
kaito
2018-10-26 10:55:38 +08:00
if(params.stream().anyMatch(Objects::isNull)){
throw new ParamException("缺少参数");
}

我可能会这么写
shazh520
2018-10-26 11:08:10 +08:00
@kaito 学习了。比我的更优雅。
519718366
2018-10-26 11:48:59 +08:00
Optional 一般不会去包裹集合吧,一般在系统中,返回集合都是返回的空集合,不会去返回 null,阿里规约里也这么推荐的。
所以 Optional 一般包裹单个可能为空的对象。
honeycomb
2018-10-26 12:05:41 +08:00
@shazh520 list 等集合的用 stream()好。

空集合宁可用 Collections.emptyList 这种公共缓存对象也不用 null
shazh520
2018-10-26 13:04:57 +08:00
@honeycomb 明白了。 如果只是说明 optional 对象一般不用来包含 list 的话,就不如说 list 用 stream 接口是更好的选择。我刚刚开始研究 optional,所以掉坑了。现在对 optional 和 stream 又加深了一点认识。谢谢。
shazh520
2018-10-26 13:06:24 +08:00
@519718366 嗯嗯。学习了谢谢😂。确实是误用了。
shazh520
2018-10-26 13:09:35 +08:00
刚开始学习 optional,习惯性的想去重构非空判断,掉坑了。
TaoSama
2018-10-26 14:07:25 +08:00
可以看一下 Java 8 in Action 了解一些 best practice,这本书几天就能看完很薄
zealot0630
2018-10-26 15:00:56 +08:00
optional 的目的之一就是让你永远不需要用 null,你理解一下,再看看你的代码
abeholder
2018-10-26 15:17:33 +08:00
@TaoSama 300 多页啊 ,之前我平均每天花几个小时看,边练习边学,看了大半个月才看完的。。。

你这几天看完,让我感觉我的智商有问题 。。。T T
abeholder
2018-10-26 15:20:49 +08:00
接上楼 ,

而且我看这本书之前,学过段时间函数式编程 ,看到函子那一块就没怎么看了。。。
TaoSama
2018-10-27 12:23:44 +08:00
@abeholder 这种书类似于闲书嘛,又不写笔记,一天 50 ~ 100 页吖
optional localdate forkjoin 都很值得看 最后面还介绍了函数式语言是啥样的很爽啊
thinking in Java 我确实看了很久 1000 多页毕竟
TaoSama
2018-10-27 12:24:26 +08:00
@abeholder 我每天上班来的时候看 1 ~ 2h 晚饭后再看一会儿

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/501316

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX