为什么Exception将Throwable作为构造函数参数而不是Exception?

时间:2016-05-04 17:39:10

标签: java constructor exception-handling class-design

我最近注意到Exception有几个构造函数,它们将Throwable作为参数。 Throwable有两个子类ErrorException,通常所有文档都表明您不应该尝试捕获或处理Error。因此,我很好奇为什么ExceptionThrowable作为构造函数参数而不是Exception。这意味着可以使用Exception创建Error作为其原因,并且可以由应用程序处理。为什么会这样?

自定义Exception类是否只提供以Exception作为参数的构造函数?

2 个答案:

答案 0 :(得分:3)

我猜它基本上是因为:

  1. 不建议您处理Error,但不禁止

  2. 无论如何都是编程到接口的好习惯,因此参数类型应该支持最广泛的类型,方法是将它作为根接口Throwable

答案 1 :(得分:2)

恕我直言,Exception类将Throwable作为参数,因为某些库或API可能会创建自己的扩展Throwable的类型,然后您的异常处理程序需要能够处理那些。

你也可以throw一个Throwable不一定是异常,这样就可以很容易地抛出一些自定义类型的程序失败,并且基于它将会有它“#1;}的可恢复性水平'。

对于您的自定义异常类,我认为它取决于处理异常时所需的粒度,大多数常见情况会优雅地处理Throwable,因为您可能无法从错误中恢复,但您仍然通知用户它发生了。