簡體   English   中英

NPE注釋場景和Java靜態分析工具

[英]NPE annotation scenarios and static-analysis tools for Java

以下是一些可以拋出NullPointerException的代碼片段。

01:

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

02:

private boolean _closed = false;

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

    System.out.print(text.toLowerCase()); // <-- expect to be reported.
}

03:

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.
}

不同的人可以訪問不同的靜態分析工具。 收集信息,能夠檢測和報告問題的工具以及失敗的信息會很好。 另外,如果你有自己的風景,請發布它們。

在這里我的結果

FindBugs(1.3.9):

  • 01:[S]參數必須是非空的,但標記為可為空
  • 02:[F]未報告
  • 03:[F]沒有報道

IntelliJ IDE 9.0.2(社區版):

  • 01:[S]方法調用text.toLowerCase()可能會產生java.lang.NullPointerException
  • 02:[S]方法調用text.toLowerCase()可能會產生java.lang.NullPointerException
  • 03:[S] Argument getText()可能為null

Checker Framework(1.0.7):

  • 01:[S]取消引用可能為空的參考文本
  • 02:[S]取消引用可能為空的參考文本
  • 03:[S]不兼容的類型。 found:@Nullable String,required:@NonNull String

注釋包:

javax.annotation.* // JSR 305
edu.umd.cs.findbugs.annotations.* // FindBugs
org.jetbrains.annotations.* // IntelliJ
checkers.nullness.quals.* // Checker Framework

請注意,FindBugs對待@Nullable和@CheckForNull的方式完全不同 - 前者基本上是在說“我不知道這是否應該允許null”,而后者則說“此方法明確允許空值”。 當我們在代碼中全局地將所有@Nullable更改為@CheckForNull時,我的團隊有更多有用的FindBugs結果,因為后者是我們真正的意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM