是否有理由编写这样的代码?
try {
foo();
} catch (final Exception e) {
throw e;
}
如果我foo()
的声明是void foo() throws Exception
正确的,那么显式处理该异常而不是仅仅重新抛出该异常会更好,但是我至少可以看到它的含义(foo()
抛出一个检查异常,因此必须被抓住或抛出)。
但是,如果foo()
的声明没有说它是throws
一个例外,这是否有道理,或者仅仅是不好的编码?
在您的示例中,这样做绝对没有意义。但是,我见过的大多数软件都对异常进行了多级日志记录,这些异常通常向上传播几层(在调用堆栈中有5层以上)。这样的事情很常见:
catch (final Exception e) {
logger.log(Level.ERROR, srcInfo, "Exception in ...");
throw e;
}
但这也可能会被滥用,因为调用方法可能会自己进行日志记录,并且日志中会重复很多,但这是一个设计问题。更常见的是,该方法将捕获特定的异常,例如
catch (CustomPlatformException e) {//log and throw e
}
然后将其重新引发到更高级别的方法,该方法将捕获的所有子类Exception
并分别记录特定流中的一般故障。
catch (Exception e) {//Log general failure in flow, usually at a higher logging level
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句