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

时间:2015-03-25 15:01:11

标签: java exception-handling

鉴于此堆栈跟踪:

 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

1 个答案:

答案 0 :(得分:5)

Java提供的唯一机制,用于选择要捕获的异常是特定的异常'类。如果你想根据它们的原因区分同一个类的异常,那么你需要捕获该类的所有异常,如你所示。

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