与“清理代码”更一致。使用Multicatching或创建一个超类Exception并捕获它。
try {
//some action
} catch (Exception1 | Exception2 e) {
//some action after exception
}
或
Exception1 extends SuperClassException
Exception2 extends SuperClassException
try {
//some action
} catch (SuperClassException e) {
//some action after exception
}
答案 0 :(得分:2)
与“清理代码”更一致。使用Multicatching或创建一个超类Exception并捕获它。
清洁代码在这里并没有帮助。我想不出任何指向这两个选项之一的不同规则。因此,我认为这可以归结为(个人/团队)风格。
最后,两种方法各有利弊:
第一个更详细,因为它告诉您完全会捕获哪些异常。您看着它,就知道了。
第二个隐藏了这一事实,因为您实际上看不到“多少”个例外可能属于该类别。但是,当然,在某种程度上,多重捕获也存在相同的问题,因为您也可以捕获一个或多个基本异常类型。
从这个角度来看,我的建议是:
答案 1 :(得分:1)
后者,只要您的项目定义了超类,并且所有子类均与catch子句同等相关,并且将以相同的方式处理。
在代码中使用更少的异常类型可以提高可读性,从而减轻的负担。但是,当捕获超类和各个相关子类之间存在语义差异时,就失去了这一优势。
但是,如果子类异常之一在抛出时需要特殊处理,或者对于日志记录方法特别感兴趣,那么您将需要使用单独的catch块。
答案 2 :(得分:1)
您必须考虑情况。如果层次结构已经存在,并且您想捕获特定层次结构分支中的所有类,则可以很好地捕获超类。
话虽如此,我绝对不会创建额外的结构来减少行数-特别是如果异常之间没有明确的IS依赖性,而您只是基于本能创建超类时,“也许这两个属于一起,因为我在同一个地方抓他们”。您正在减少工作量,但在类层次结构中增加了额外的复杂性-IMHO使代码更难分析,并增加了预测其行为所需的时间。