Java中的异常翻译与异常链接

时间:2017-12-14 04:57:53

标签: java exception-handling

Java中Exception TranslationException Chaining之间有什么区别?

1 个答案:

答案 0 :(得分:3)

Effective Java 中的 Joshua Bloch -

例外翻译
较高层应该捕获较低级别的异常 并且,取而代之的是抛出可以用来解释的异常 更高层次的抽象。

try {
    // Use lower-level abstraction to do our bidding
    ...
} catch(LowerLevelException e) {
    throw new HigherLevelException(...);
}

异常链接
它是异常翻译的特殊形式。 如果较低级别的异常可能对某些调试有帮助 导致更高级别异常的问题。较低级别的异常(原因)被传递给更高级别的异常,它提供了一个 访问器方法(Throwable.getCause)来检索较低级别的异常:

try {
    ... // Use lower-level abstraction to do our bidding
} catch (LowerLevelException cause) {
    throw new HigherLevelException(cause);
}

高级异常的构造函数将原因传递给链接感知 超类构造函数,因此它最终传递给Throwable的一个chainingaware构造函数,例如Throwable(Throwable):

// Exception with chaining-aware constructor
class HigherLevelException extends Exception {
    HigherLevelException(Throwable cause) {
        super(cause);
    }
}