我读过一些其他帖子,例如 this one关于避免在 Java catch
block 中重复。显然,我真正想要的是“multi-catch”,但是鉴于 Java 7 还没有出现,是否有一个好的模式可以让我向异常添加状态,然后重新抛出它们, 没有 catching the kitchen sink ?
具体来说,我有一些进行库调用的代码,这些代码可能会引发异常,但没有提供足够的上下文来成功调试。我发现自己遇到了问题,然后进入,将库调用包装在 try/catch 中,捕获特定的异常,然后在 catch
block 中添加额外的状态信息并重新抛出捕获的异常。然后我一遍又一遍地重复这个循环,每次都找到一个新的错误条件来记录。我结束了
try {
make_library_call();
}
catch (SomeException e){
throw new SomeException ("Needed local state information is " + importantInfo, e);
}
catch (SomeOtherException e){
throw new SomeOtherException ("Needed local state information is " + importantInfo, e);
}
catch (YetAnotherException e){
throw new YetAnotherException ("Needed local state information is " + importantInfo, e);
}
等等等等。我想我真正想看到的是
try {
make_lib_call();
}
catch(Exception e){
e.AddSomeInformationSomehow("Needed Info" + importantInfo);
throw e;
}
假设在那种情况下 e
会在重新抛出时保持其实际运行时类型——在这种情况下,即使未检查捕获也可能没问题,因为我会重新抛出它们,并且他们也会从携带额外的状态信息中受益。我想替代品可能是这样的
try{
make_lib_call();
}
finally {
if (/*an exception happened*/)
logger.debug("Some state info: " + importantInfo);
}
但是我不知道怎么写条件。这是疯了还是错了?
最佳答案
您可能预料到了这一点,但是不,没有好的(好的,我的意思是干净的)方法来做到这一点。您可能会期待它,因为您下意识地知道如果有一个好的模式可以做到这一点,那么它可能不值得添加到 Java 7 中。
实际上是final rethrow您会发现在这种情况下非常方便的功能。
关于java - 捕获多个Java异常时,如何在不写重复代码的情况下添加状态信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3168317/