这确实是可怕的做法。特别是捕捉
Exception到的东西而不是特定的东西会散发出可怕的气味-
甚至
NullPointerException会被吞下。即使可以确定抛出的特定异常没有实际后果,也应始终至少记录下该异常:
try { // pre}catch (MyInconsequentialException mie) { // tune level for this logger in logging config file if this is too spammy MY_LOGGER.warning("Caught an inconsequential exception.", mie);}
但是,在这种情况下例外不可能完全没有意义。我建议确切研究应用程序代码打算在这里吞下哪些异常,以及它们对于执行的真正含义。
一个重要的区别是是否使用try / catches吞下了已检查的异常。如果是这种情况,则可能表明程序员方面极度冷漠-
有人只是想编译他/她的代码。至少应修改代码:
try { // pre}catch (SpecificCheckedException sce) { // make sure there is exception logging done farther up throw new RuntimeException(sce);}
这将抛出包装在unchecked中的异常
RuntimeException,有效地允许代码进行编译。但是,即使这也可以被认为是一个简单的创举-
检查异常的最佳实践是在当前方法中或通过添加
throws SpecificCheckedException方法签名来单独处理它们。
就像@Tom Hawtin提到的那样,
new Error(sce)可以使用它来代替,
newRuntimeException(sce)以避开
Exception更进一步的捕获,这对于不希望被抛出的东西是有意义的。
如果不使用try / catch吞下已检查的异常,则同样危险,应将其删除。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)