有一个遗留Java项目。
在代码审查期间,我注意到我的同事替换了代码
} catch (Exception e) {
ok = false;
}
// and ok was never used since then
与
} catch (Exception e) {
e.printStackTrace();
}
也就是说,最糟糕的做法是“忽略异常”被第二个最差的“打印到stdout的异常并继续”。 (同事们认为代码不会因此而变得更糟。)
我知道有一个关于它的整体holy war,并且在抓住异常之前,真正聪明的人建议每个人首先思考。不幸的是,看起来这还没有完成。遗留代码捕获异常并忽略它们。可以修改代码以抛出异常而不是忽略它,但是没有人知道有多少用例场景会因此而中断。单元测试无济于事,因为单元测试不包含该方法。甚至没有人知道该方法被调用多少场景。
鉴于调用者和被调用方法之间的契约不明确,我们可以对捕获和忽略异常的遗留代码做些什么?
答案 0 :(得分:0)
有些情况下会出现例外,并且可以继续安全。在任何情况下,您都应该使用记录器框架来记录异常而不是
display: flex
首先你应该把它变成
e.printStackTrace();
一些选项:
logger.error("context", e);
或logger.info()
(由@Ivan评论)