大多数静态代码分析工具建议不要捕获通用(特别是未经检查的)异常,如 RuntimeExceptions 和 Errors。
除非此异常屏障在顶层可能是合理的,否则通常不会在较低级别。不幸的是,在重写/修复已经存在的代码时,这可能很难实现,因为潜在的错误和 RuntimeExceptions 的潜在可能性可能过高。此外,深入研究较低的代码级别以获得一些足够合理的异常概念以捕获而不是通用捕获,这主要是一项非常耗时且复杂的任务。
您是否知道将此类通用(未经检查的)异常分解为更具体的异常的任何工具或最佳实践?
说我们有这样的东西:
try
{
somethingReallyComplex();
}
catch (RuntimeException | Error ex)
{
Logger.error(this, ex.getClass().getName() + " while doing something really complex", ex)
}
try 块可以包含一个非常复杂的代码问题,其中包含各种不同的 RuntimeExceptions 和 Errors,这些都是有意义的捕获。但是,我怎样才能最有效地分析此代码以将 RuntimeException 分解为 NullPointerException、ArrayIndexOutOfBoundException ......无论是什么合理的?
是否有任何工具可以分析此类代码并就其中最常见的 RuntimeExceptions 等提供建议?
你如何着手解决这个问题?
主观或客观的“阈值”在哪里说:“不,我只是将其保留为 RuntimeException 并添加抑制注释?”