用于Java的NPE注释场景和静态分析工具

用于Java的NPE注释场景和静态分析工具,java,static-analysis,nullpointerexception,Java,Static Analysis,Nullpointerexception,下面是一些可以引发NullPointerException的代码片段 01: 请注意,FindBugs对@Nullable和@CheckForNull的处理方式截然不同——前者基本上是说“我不知道这是否应该允许null”,后者说“此方法明确允许nulls”。当我们在代码中将所有@Nullable改为@CheckForNull时,我的团队得到了更有用的FindBugs结果,因为后者才是我们真正的意思。由于您要求多人提供答案,您可能需要标记此社区wiki。请指定@Nullable和@NotNull来

下面是一些可以引发NullPointerException的代码片段

01:


请注意,FindBugs对@Nullable和@CheckForNull的处理方式截然不同——前者基本上是说“我不知道这是否应该允许null”,后者说“此方法明确允许nulls”。当我们在代码中将所有@Nullable改为@CheckForNull时,我的团队得到了更有用的FindBugs结果,因为后者才是我们真正的意思。

由于您要求多人提供答案,您可能需要标记此社区wiki。请指定@Nullable和@NotNull来自哪个包,因为它们不是Java6.1的一部分。标记为社区wiki。2.不同的工具似乎有自己的注释库。对于IntelliJ,它们来自org.jetbrains.annotations.*,而对于FindBugs,则是edu.umd.cs.FindBugs.annotations.*但在这两种情况下,该库都称为annotations.jar。问得好。看看这些工具还提供了哪些与NPE相关的其他特性也会很有趣,例如检查器框架中的lazy nonnull。。。当我为FindBug使用CheckForNull或Nullable时,我认为提供的测试结果是相同的。@alex2k8:有趣。我想知道FindBugs的最新版本是否改变了这一点?FindBugs的当前版本是1.3.9(我在测试中使用的版本)。
public void m1(@Nullable String text) {
    System.out.print(text.toLowerCase()); // <-- expect to be reported.
}
private boolean _closed = false;

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

    System.out.print(text.toLowerCase()); // <-- expect to be reported.
}
public void m1(@NotNull String text) {
    System.out.print(text.toLowerCase());
}

public @Nullable String getText() {
    return "Some text";
}

public void m2() {
    m1(getText());  // <-- expect to be reported.
}
javax.annotation.* // JSR 305
edu.umd.cs.findbugs.annotations.* // FindBugs
org.jetbrains.annotations.* // IntelliJ
checkers.nullness.quals.* // Checker Framework