这是我们可以进行异常链接的两种方式:
Throwable initCause(Throwable)
Throwable(Throwable)
我认为第二个更优雅,使用更广泛。那么为什么Java核心库中的一些标准异常实际上缺少一个链感知构造函数呢?
答案 0 :(得分:0)
这就是javodoc所说的
统一所有这些设施有很多好处。首席 其中包括:(1)我们保证任何想要记录的人 事实上,一个例外导致另一个例外,可以这样做,不管是什么 例外情况是。 (2)通过提供通用API来记录事实 一个例外导致另一个例外,我们简化了这个任务,使其更多 可能程序员会不厌其烦地去做。 (3)通过 我们提供了一个通用API来访问因果异常 增加提供此信息的可能性 对那些需要它的人。事实上,提出的机制打印整个 “因果链”作为标准堆栈回溯的一部分,确保这一点 预先存在的程序将不再提供此信息 他们的作者努力。
为了解决这些问题,我们为Throwable添加了两个新方法, getCause()和initCause(Throwable),以及两个新的构造函数, 可投掷(可投掷)和可投掷(字符串,可投掷)。其他“一般 目的“异常类(如Exception,RunTimeException和 错误)同样配备了(Throwable)和(String, 可投掷的建设者。但是,即使没有这样的例外 构造函数将通过initCause用作“包装异常” 方法
http://docs.oracle.com/javase/1.5.0/docs/guide/lang/chained-exceptions.html