有一个方法 get(sql)
(我不能修改它)。此方法返回 MyObjects 并且它必须位于 try catch 块中,因为 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 也强制尝试捕获。对于:
MyObject object = Optional.ofNullable(get(sql)).orElseThrow(JqlParseException::new));
是一个错误(在 IDE 中) The type JqlParseException does not define JqlParseException() that is applicable
。有什么办法可以避免 try catch 块而使用 optional 吗?
原文由 joe paulens 发布,翻译遵循 CC BY-SA 4.0 许可协议
Optional
不是为了处理异常,它是为了处理潜在的null
s 而不会中断程序的流程。例如:如果可选项为空,这将自动跳过
map
步骤并直接转到throw
步骤 - 一个很好的完整程序流程。当你写:
…您真正要说的是:返回我的可选值,但如果不可用则抛出异常。
您似乎想要的是一种创建可选的方法(立即捕获异常)并在您尝试使用可选时重新抛出该异常。