findbugs 来自 Throwable 的未经检查/未经确认的演员表

fas*_*sth 2 java exception-handling findbugs exception

我有一些应该从抛出的 InvocationTargetException 中检索的自定义异常,我按以下方式进行:

    try {
        ...
    }
    catch (IllegalAccessException | InvocationTargetException 
| NoSuchMethodException | NoSuchFieldException e) {
        if (e.getCause() instanceof CustomException) {
        throw (CustomException) e.getCause();
        }

        throw new IllegalArgumentException();
    }
Run Code Online (Sandbox Code Playgroud)

但是 findbugs 向我抱怨:

来自 Throwable 的未经检查/未经确认的演员表

我发现了一个 silimar 问题(如何解决 dodgy:unchecked/unconfirmed cast in sonar?),但它没有帮助。

Rob*_*sen 5

我认为如果您首先将原因分配给局部变量,FindBugs 将能够正确解决问题:

try {
    /* ... */
} catch (IllegalAccessException | InvocationTargetException 
        | NoSuchMethodException | NoSuchFieldException e) {

    Throwable cause = e.getCause();

    if (cause instanceof CustomException) {
        throw (CustomException) cause;
    }

    throw new IllegalArgumentException();
}
Run Code Online (Sandbox Code Playgroud)

  • 这是有效的,因为 FindBugs 无法知道 `getCause()` 不会在后续调用中返回不同的值。局部变量将值固定到位。 (3认同)