0

这是我们可以进行异常链接的两种方式:

Throwable initCause(Throwable)
Throwable(Throwable)

我认为第二种更优雅,使用更广泛。那么为什么 Java 核心库中的一些标准异常实际上缺少链感知构造函数呢?

4

1 回答 1

0

这就是javodoc所说的

将所有这些设施统一起来有很多好处。其中最主要的是:(1)我们保证任何想要记录一个异常导致另一个异常的事实的人都可以这样做,无论异常是什么。(2) 通过提供一个通用的 API 来记录一个异常导致另一个异常的事实,我们简化了这项任务,使程序员更有可能不厌其烦地去做。(3) 通过提供一个通用的 API 来访问导致异常的情况,我们大大增加了将这些信息提供给需要它的人的可能性。事实上,所提议的机制将整个“因果链”打印为标准堆栈回溯的一部分,确保预先存在的程序将提供此信息而无需其作者额外努力。

为了解决这些问题,我们为 Throwable 添加了两个新方法 getCause() 和 initCause(Throwable),以及两个新的构造函数 Throwable(Throwable) 和 Throwable(String, Throwable)。其他“通用”异常类(如 Exception、RunTimeException 和 Error)也同样配备了 (Throwable) 和 (String, Throwable) 构造函数。但是,即使没有此类构造函数的异常也可以通过 initCause 方法用作“包装异常”。

http://docs.oracle.com/javase/1.5.0/docs/guide/lang/chained-exceptions.html

于 2012-07-20T08:13:13.597 回答