关于具有以下模板的Java Optional
Optional.ofNullable(executeMethodA())
.ifPresent(() -> executeMethodB());
这里有两种情况:
- 如果
executeMethodA()
返回null
,则不执行ifPresent
- 如果
executeMethodA()
返回而不是null
,则执行ifPresent
直到一切正常。但是如果executeMethodA()
抛出一个Exception
呢?
有没有像
Optional.ofNullable(executeMethodA())
.ifException(ex -> handleException(ex)) <---
.ifPresent(() -> executeMethodB());
或
Optional.ofNullable(executeMethodA())
.ifException(ex -> { try/catch block}) <---
.ifPresent(() -> executeMethodB());
目的是避免
try {
Optional.ofNullable(executeMethodA())
.ifPresent(() -> executeMethodB());
}
catch(Exception ex){
...
}
- 问题:**
- 如何处理内部异常,如果抛出的主要方法中执行的一个可选?
2条答案
按热度按时间ss2ws0br1#
它不仅不存在,而且不可能存在。
在下面的表达式中,计算
executeMethodA()
,然后将结果传递给Optional.ofNullable
。如果
executeMethodA
抛出,则Optional
上的任何方法都不会被调用,它无法创建某种类型的方法链。In Brian Goetz' own words:
可选的目的是为库方法***返回类型***提供一个***有限的***机制,其中明确需要表示"无结果",并且为此使用null***极有可能导致错误***。
它不是设计用来替换应用程序中的每个条件分支的,也永远不会设计成这样。
mec1mxoz2#
当然没有内置的机制来实现这个功能,而且我也不认为它会取代try-catch,一种方法是将示例化转移到一个单独的调用中。
你也可以使它更通用,但这取决于你。