"不要抓住通用的例外!" 但是如何揭开它们呢?

Van*_*kog 3 java error-handling static-analysis exception

大多数静态代码分析工具建议不要捕获一般(特别是未经检查的)异常,如RuntimeExceptions和Errors.

除非此异常障碍在顶层可能是合理的,否则通常不会处于较低级别.不幸的是,在重写/修复现有代码时,这很难实现,因为可能的错误和RuntimeExceptions的潜在可能性可能过高.此外,挖掘较低的代码级别来获取一些合理的Exceptions概念以捕获而不是通用catch,这实际上是一个非常耗时且复杂的任务.

您是否知道将这些通用(未经检查)的异常解释为更具体的异常的任何工具或最佳实践?

说我们有类似的东西:

try
{
    somethingReallyComplex();
}
catch (RuntimeException | Error ex)
{
    Logger.error(this, ex.getClass().getName() + " while doing something really complex", ex)
}
Run Code Online (Sandbox Code Playgroud)

try块可以包含一个非常复杂的代码问题,其中包含各种不同的RuntimeExceptions和Errors,这些都是有意义的.但是,如何最有效地分析此代码以将RuntimeException解析为NullPointerException,ArrayIndexOutOfBoundException ...无论什么可能合理?

是否有任何工具可以分析此类代码并提供有关大多数常见RuntimeExceptions的建议等等?

你是如何开始解决这个问题的?

主观或客观"阈值"在哪里说:"不,我只是把它作为RuntimeException并添加一个抑制注释?"

Mar*_*nik 7

关于捕一般例外,最重要的是在那里你抓住他们,而不是是否.如果你在一个中心位置,一个所谓的异常屏障,它在调用堆栈中处于高位,那么这正是你应该做的.如果你在代码中间做了一些或多或少的任意点,这将是一个不好的做法.

  • 这就是规则抑制的目的。 (2认同)