鉴于此堆栈跟踪:
java.lang.RuntimeException:
...
Caused by: com.mypackage.SpecificException
这个试试看:
try {
ts.init();
} catch (RuntimeException e) {
if (e.getCause() instanceof SpecificException) {
//do something
} else {
throw e;
}
}
我无法修改SpecificException
的代码,也无法修改将此异常包装到RuntimeException
的方法。
有没有更好的方法只能抓住SpecificException
?
答案 0 :(得分:5)
Java提供的唯一机制,用于选择要捕获的异常是特定的异常'类。如果你想根据它们的原因区分同一个类的异常,那么你需要捕获该类的所有异常,如你所示。
但是,请注意,一旦发现异常,重新抛出异常就会出现问题,因为它会将原始堆栈跟踪替换为特定于新throw
上下文的新异常。这可能会使调试变得更加困难。为避免这种情况,您需要将捕获的异常包装为单独的新异常的原因,并将其抛出。