【发布时间】:2023-03-31 22:11:02
【问题描述】:
在尝试从Optional 获取值或使用Optional.get 时,如何避免显式抛出Exception?
目前,这可能通过 API orElseThrow 进行保护:
// exception could be replaced with any other
Integer opt = anyOddInStream.orElseThrow(
() -> new NoSuchElementException("No value present"));
然而,在尝试访问类似
// the following not only just fails but throws an exception as well
Integer previous = anyOddInStream.get();
如果想确保Optional 有一个值,如果没有,他们不想继续向前传播null 怎么办?
【问题讨论】:
-
@shmosel 没关系。 “NoSuchElementException 如果不存在值”是 API。关键是抛出异常的不是 OP。
-
我绝对不明白这个添加,是准备删除/弃用
get吗?我真希望@StuartMarks 能来这里…… -
@Eugene Brian 已经回答了。但弃用
get()仍然存在,尽管在继续之前我们还有更多工作要做。 (另请注意,除非该人之前发表过评论,否则@-通知不起作用,因此我没有从您的评论中收到通知。我只是碰巧看到它,因为我监控了Optional标签。) -
这篇文章很有用(我只是把它当作一个骗子),但问题是真的难以阅读。请尽量说清楚。
-
@shmosel 是的,在我问这个问题的时候,我认为问题应该是什么和当前已经提供的重载实现之间存在着很大的差距。实际上,回过头来看,问题只是寻求使用
get与orElseThrow的区别。老实说,就目前的情况而言,我自己觉得它们都让消费者陷入了麻烦的境地。 (意见)