【发布时间】:2016-07-25 23:24:52
【问题描述】:
所以我正在使用 Optionals 并遇到了一个奇怪的行为。我想知道这是否真的是一个有意的“功能”或什么......奇怪......
这是给定的示例: 我有一个带有 Optional 的方法,我想在其 orElse 中评估另一个可选。如果另一个 Optional 不存在,我将引发 IllegalArgumentException:
firstOptionalVar.orElse(secondOptionalVar.orElseThrow(IllegalArgumentException::new));
现在,如果 secondOptionalVar 是一个空的 Optional,即使 firstOptionalVar 存在,它也会引发 IllegalArgumentException。这对我来说似乎不对。如果firstOptionalVar 不存在,我希望它只会引发 IllegalArgumentException。
使用 java7 方法来解决这种行为并不是什么大问题,例如:
firstOptionalVar.isPresent() ? firstOptionalVar.get() : secondOptionalVar.orElseThrow(IllegalArgumentException::new);
以前有没有其他人经历过这种行为?这真的是可选项的行为方式吗?
【问题讨论】:
-
flatMap不幸地相反。 -
异常的答案可以在链接的问题或你得到的答案中找到。请注意,您要执行的“或”操作将在 Java 9 上可用:stackoverflow.com/questions/24599996/…
-
感谢您的回答。 @resueman 的解决方案对我有用,但很高兴知道 java9 将如何处理这种情况:)
标签: java exception-handling java-8 optional