我最近注意到
Exception
有几个以 Throwable
作为参数的构造函数。 Throwable
有两个子类,Error
和 Exception
,通常所有文档都表明您不应尝试捕获或处理 Error
。因此,我很好奇为什么 Exception
采用 Throwable
作为构造函数参数而不是 Exception
。这意味着可以使用 Exception
作为其原因来创建 Error
,并且可以由应用程序处理。为什么会这样?
自定义
Exception
类是否应该只提供以 Exception
作为参数的构造函数?
我想这基本上是因为:
不建议处理
Error
,但不禁止。无论如何,对接口进行编程是一个很好的做法,因此参数类型应该通过将其作为根接口来支持最广泛的类型
Throwable
。恕我直言,
Exception
类构造函数接受Throwable
作为参数,因为某些库或API可能需要创建扩展Throwable
的故障类型,然后您的故障处理程序也需要能够处理这些类型。
此外,您可以
throw
Throwable
而不一定是例外。这使得很容易抛出自定义类型的程序故障,因此它将具有独特的可恢复性。
对于您的自定义
Exception
类,我认为这取决于您在处理故障时想要的粒度。大会将得到妥善处理Throwable
s。这是因为即使您可能无法从错误中恢复,您可能仍然希望通知用户错误已经发生。