旧版代码

时间:2018-01-22 14:41:34

标签: java exception

有一个遗留Java项目。

在代码审查期间,我注意到我的同事替换了代码

    } catch (Exception e) {
        ok = false;
    }
    // and ok was never used since then

    } catch (Exception e) {
        e.printStackTrace();
    }

也就是说,最糟糕的做法是“忽略异常”被第二个最差的“打印到stdout的异常并继续”。 (同事们认为代码不会因此而变得更糟。)

我知道有一个关于它的整体holy war,并且在抓住异常之前,真正聪明的人建议每个人首先思考。不幸的是,看起来这还没有完成。遗留代码捕获异常并忽略它们。可以修改代码以抛出异常而不是忽略它,但是没有人知道有多少用例场景会因此而中断。单元测试无济于事,因为单元测试不包含该方法。甚至没有人知道该方法被调用多少场景。

鉴于调用者和被调用方法之间的契约不明确,我们可以对捕获和忽略异常的遗留代码做些什么?

1 个答案:

答案 0 :(得分:0)

有些情况下会出现例外,并且可以继续安全。在任何情况下,您都应该使用记录器框架来记录异常而不是

display: flex

首先你应该把它变成

e.printStackTrace();

一些选项:

  • 使用日志检测哪些例外情况正常,并将其降级为logger.error("context", e); logger.info()(由@Ivan评论)
  • 一段时间后,更改剩余的位置以引发新的已检查例外。这将允许您获得有关哪些其他代码将受到影响的编译器反馈。稍后您可以恢复为未选中状态。
    • 开始单元测试
    • 开始保护产品的主要循环/入口点免受任何地方发生的未经检查的异常的影响