问题是:
同样的处理是一个足够好的理由用一个替换所有5个不同的异常类。或者有5个不同的异常有一些真正的价值,因为它们的名称(异常类的名称)可以帮助理解问题并简化调试或任何其他原因....
或者改写它:
当您在代码中创建新的异常类时,是否可以看到代码中存在唯一处理此异常,或者恰当地描述< / strong>异常类名称的问题?
答案 0 :(得分:0)
如果异常以相同的方式处理并且它们具有相同的字段,那么它们也可能是一个。
但是,对于5种不同的情况,有5个不同的异常类有一些优点。您命名其中一个优点:它可以帮助理解代码(自我记录代码)。
另一个优点是,稍后您(或某人)可能会决定在将来引入对这些例外的一些不同处理。预先抛出不同类型的异常会使实现新的异常处理变得更加容易。
那就是说,一个危险就是你在异常类本身中经常会有复制粘贴的冗余代码,这是你不得不权衡其优势的一个缺点。
答案 1 :(得分:0)
在您的特定情况下,您可能只有一个可以通常处理的自定义异常。抛出该异常时,您可以发送特定的字符串消息,提及实际异常*的原因/位置。让适当的调用者处理此异常。
优点:防止多个异常类(以及它们的簿记开销)。
答案 2 :(得分:0)
您已经确定了为什么多个例外可以更好的一个原因。它可能使调试更容易。
如果它们被检查了异常,那么产生多个异常的第二个原因是,当你将一个方法声明为抛出一个特定的异常(而不是一般异常)时,它会使编码API的人更容易理解可能会发生。
最后,如果您已经创建并使用了异常(一致),那么保留它们可以让您选择在将来的某个时刻以不同方式处理异常。例如,如果您的应用程序的要求发生变化。
当您在代码中创建一个新的异常类时,是否可以看到代码中可以对此异常进行唯一处理,或者它是否恰当地描述了异常类名称的问题?
当我设计一个应用程序时,只要出现&#34;错误条件,我就会创建一个新的异常。其语义不足以由现有异常描述 1 。如何处理异常(相同或不同)根本不是考虑因素......当我正在设计代码时。
1 - 显然,什么足够是一个意见问题。我当然不会为每个精细的语义区别创建一个不同的例外。这就是message
属性发挥作用的地方。
答案 3 :(得分:0)
不同的异常为处理程序提供了更多信息。如果不被滥用,这通常是件好事。
你没有提到的关于你的例外的最重要的事情是它们是否扩展了一个共同的基类?如果是这样,那么即使您提供更多细节,您的捕获和抛出条款仍然很简单。
通常,当我从头开始构建系统时,我最多有两个基本异常,所有其他异常都会扩展 - 一个已检查的异常和一个未经检查的异常。通过这种方式,我的类可以捕获通用异常,只是为了阻止我们的代码生成的异常,并且可以像我喜欢切片解决问题以获得精细的解决方案。
因此,我认为以不同方式处理异常对于在代码中创建更多信息同样重要。我认为冗余代码值得这两个原因。