为什么在Java中链接Exception有两种不同的方法?哪种情况更好?

时间:2012-07-20 08:08:28

标签: java exception exception-handling

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

Throwable initCause(Throwable)
Throwable(Throwable)

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

1 个答案:

答案 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