有没有更好的方法来捕获异常的特定原因?

Jon*_*n C 6 java exception-handling

鉴于此堆栈跟踪:

 java.lang.RuntimeException:
...
Caused by: com.mypackage.SpecificException
Run Code Online (Sandbox Code Playgroud)

这个尝试抓住:

try {
    ts.init();
} catch (RuntimeException e) {
    if (e.getCause() instanceof SpecificException) {
        //do something
    } else {
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法修改代码,SpecificException也无法修改将此异常包装到的方法RuntimeException.

有没有更好的方法来捕捉SpecificException

Joh*_*ger 5

Java提供的唯一机制是选择要捕获的异常是特定的异常类.如果您想根据其原因区分同一类的异常,那么您需要捕获该类的所有异常,如您所示.

但是请注意,一旦捕获异常就重新抛出异常是有问题的,因为它会将原始堆栈跟踪替换为特定于新异常上下文的新异常throw.这可能会使调试变得更加困难.为避免这种情况,您需要将捕获的异常包装为单独的新异常的原因,然后抛出该异常.