有没有更好的方法来捕获异常的特定原因?
Is there a better way to catch only specific cause(s) of an exception?
鉴于此堆栈跟踪:
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
?
提供的唯一机制 Java 用于选择要捕获的异常是特定异常的 class。如果你想根据它们的原因区分相同 class 的异常,那么你需要捕获那个 class 的所有异常,正如你所展示的那样。
但是请注意,一旦捕获到异常就重新抛出它是有问题的,因为这会用特定于新 throw
上下文的新堆栈跟踪替换原始堆栈跟踪。这会使调试变得更加困难。为避免这种情况,您需要将捕获的异常包装为单独的新异常的原因,然后抛出该异常。
鉴于此堆栈跟踪:
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
?
提供的唯一机制 Java 用于选择要捕获的异常是特定异常的 class。如果你想根据它们的原因区分相同 class 的异常,那么你需要捕获那个 class 的所有异常,正如你所展示的那样。
但是请注意,一旦捕获到异常就重新抛出它是有问题的,因为这会用特定于新 throw
上下文的新堆栈跟踪替换原始堆栈跟踪。这会使调试变得更加困难。为避免这种情况,您需要将捕获的异常包装为单独的新异常的原因,然后抛出该异常。