有一个方法get(sql)
(我不能修改)。此方法返回 MyObjects 并且它必须在 try catch block 中,因为那里可能存在 JqlParseException
。我的代码是:
String sql = something;
try{
MyObject object = get(sql);
} catch(JqlParseException e){
e.printStackTrace();
} catch(RuntimeException e){
e.printStackTrace();
}
我想删除 try catch 并使用 Optional
类,我试过了:
MyObject object = Optional.ofNullable(get(sql)).orElseThrow(RuntimeException::new);
但 IDE 也强制在那里尝试 catch。 对于:
MyObject object = Optional.ofNullable(get(sql)).orElseThrow(JqlParseException::new));
是一个错误(在 IDE 中)JqlParseException 类型没有定义适用的 JqlParseException()
。有什么办法可以避免 try catch block 并使用 optional 吗?
最佳答案
Optional
不是为了处理异常,而是为了处理潜在的 null
而不破坏程序的流程。例如:
myOptional.map(Integer::parseInt).orElseThrow(() -> new RuntimeException("No data!");
如果可选项为空,这将自动跳过 map
步骤并直接进入 throw
步骤——一个不错的完整程序流程。
当你写作时:
myOptionalValue.orElseThrow(() -> new RuntimeException("Unavailable"));
...您真正的意思是:返回我的可选值,但如果它不可用则抛出异常。
您似乎想要的是一种创建可选项(立即捕获异常)并在您尝试使用可选项时重新抛出该异常的方法。
关于java - 在Java8中的可选中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42993428/