当null测试在一个单独的方法中时,Findbugs会发出“NP_NULL_ON_SOME_PATH”。这是误报吗?

时间:2013-05-21 03:53:05

标签: java findbugs

我有一些类似于以下代码段的代码:

public void foo(Order o) {
    ...
    checkInput(o, "some error message");
    doSomehing(o.getId());
}

private void checkInput(Object o, String message) {
    if (o == null) {
        throw new SomeRuntimeException(message);
    }
}

我让Findbugs报告了'NP_NULL_ON_SOME_PATH'问题。

以下是描述:

There is a branch of statement that, if executed, guarantees that a null value will be dereferenced, which would generate a NullPointerException when the code is executed. Of course, the problem might be that the branch or statement is infeasible and that the null pointer exception can't ever be executed; deciding that is beyond the ability of FindBugs.

我的问题是:

  1. 在这个例子中,我可以将其视为误报吗?
  2. 将空测试放在单独的方法中是一种好习惯吗?实际的空检查方法比示例方法稍长,所以我不想在任何地方重复代码。
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

看起来FindBugs无法检测到这种情况,至少在Eclipse中是2.0.2。一种解决方法是从checkError返回值,并使用@Nonnull注释该方法。

public void foo(Order o) {
    ...
    doSomehing(checkInput(o, "some error message").getId());
}

@Nonnull
private Order checkInput(Order o, String message) {
    if (o == null) {
        throw new SomeRuntimeException(message);
    }
    ...
    return o;
}