我最近注意到Exception
有几个构造函数,它们将Throwable
作为参数。 Throwable
有两个子类Error
和Exception
,通常所有文档都表明您不应该尝试捕获或处理Error
。因此,我很好奇为什么Exception
将Throwable
作为构造函数参数而不是Exception
。这意味着可以使用Exception
创建Error
作为其原因,并且可以由应用程序处理。为什么会这样?
自定义Exception
类是否只提供以Exception
作为参数的构造函数?
答案 0 :(得分:3)
我猜它基本上是因为:
不建议您处理Error
,但不禁止。
无论如何都是编程到接口的好习惯,因此参数类型应该支持最广泛的类型,方法是将它作为根接口Throwable
。
答案 1 :(得分:2)
恕我直言,Exception
类将Throwable
作为参数,因为某些库或API可能会创建自己的扩展Throwable
的类型,然后您的异常处理程序需要能够处理那些。
你也可以throw
一个Throwable
不一定是异常,这样就可以很容易地抛出一些自定义类型的程序失败,并且基于它将会有它“#1;}的可恢复性水平'。
对于您的自定义异常类,我认为它取决于处理异常时所需的粒度,大多数常见情况会优雅地处理Throwable
,因为您可能无法从错误中恢复,但您仍然通知用户它发生了。