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

问题描述 投票:0回答:2

我最近注意到

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

自定义

Exception
类是否应该只提供以
Exception
作为参数的构造函数?

java constructor exception class-design
2个回答
4
投票

我想这基本上是因为:

  1. 不建议处理

    Error
    ,但不禁止

  2. 无论如何,对接口进行编程是一个很好的做法,因此参数类型应该通过将其作为根接口来支持最广泛的类型

    Throwable


4
投票

恕我直言,

Exception
类构造函数接受
Throwable
作为参数,因为某些库或API可能需要创建扩展
Throwable
的故障类型,然后您的故障处理程序也需要能够处理这些类型。

此外,您可以

throw
Throwable
而不一定是例外。这使得很容易抛出自定义类型的程序故障,因此它将具有独特的可恢复性

对于您的自定义

Exception
类,我认为这取决于您在处理故障时想要的粒度。大会将得到妥善处理
Throwable
s。这是因为即使您可能无法从错误中恢复,您可能仍然希望通知用户错误已经发生。

© www.soinside.com 2019 - 2024. All rights reserved.