异常层次结构真的有用吗?

zne*_*eak 10 language-agnostic oop exception

我渐渐明白,我从来没有见过创建子类,但追赶的父类是真正有用的(除,当然,对于基本异常类,对于这一个单一的异常层次结构处导出).

异常层次结构是否真的有用,xor是否应该从语言的基本异常类派生所有异常?

JSB*_*ոգչ 5

当您需要在不同位置捕获不同粒度时,异常层次结构对于将相关异常分组在一起非常有用.

将所有应用程序异常放在一个地方是最常见的用例.这允许您捕获MyAppException任何想要捕获来自应用程序的所有错误的时间,但在适当时仍捕获更具体的异常.(在.NET中,ApplicationException该类是为此而设的,但由于各种原因它已被弃用.)

但是,您也可以在模块边界处或以任何其他有意义的方式将异常分组.使用FooModuleException从未来例外Foo模块,但捕捉和处理FooModuleMustFrobnicate专门的内部Foo.或任何等效的情况.

我在不同的时间使用了所有这些模式.

  • 您是否有一个示例,以不同的粒度捕获异常实际上有用?我的意思是,如果我们忘记所有理论并变得实用,我从未见过实际使用过捕获粒度的地方.另一方面,我看到很多人在打开文件时会捕获`IOException`,但他们只能得到一个`FileNotFoundException`.他们使用`IOException`,因为层次结构使他们认为可能发生其他相关事件,而实际上,`IOException`子类在外观上下文方面相当脱节. (3认同)