使用FindBugs发现NullPointerException错误

ale*_*2k8 9 java static-analysis findbugs

当我在此代码上运行FindBugs时,它报告没有问题.

boolean _closed = false;

public void m1(@Nullable String text) {
    if(_closed)
        return;

    System.out.println(text.toLowerCase());
}
Run Code Online (Sandbox Code Playgroud)

虽然在这里找到了预期的问题:

public void m1(@Nullable String text) {
    System.out.println(text.toLowerCase());  // FindBugs: text must be nonnull but is marked as nullable
}
Run Code Online (Sandbox Code Playgroud)

为什么在第一种情况下会失败?

Jar*_*sen 0

@Nullable 仅适用于那些您希望允许为空的参数、方法或字段。

似乎您允许文本变量为空值。您可能应该改用@NonNull。

编辑

我自己尝试了一下,得到了同样的结果。

findbugs 错误(来自确实给出空指针错误的第二种方法)报告中的文本显示:

此参数的使用方式始终要求其为非空,但该参数被显式注释为可为 Nullable。要么是参数的使用错误,要么是注释错误。

我的猜测是,由于它不是最终参数,FindBugs 不能/不会对 _close 的值做出任何假设,因为您可以稍后更改它。我什至尝试将 _close variabel 方法限制在 m1 方法内,但它仍然没有将其报告为错误。