簡體   English   中英

javax.annotation:@Nullable vs @CheckForNull

[英]javax.annotation: @Nullable vs @CheckForNull

兩者有什么區別? 兩者似乎都意味着該值可以為null並且應該相應地處理,即檢查為null。

更新:上面的兩個注釋是JSR-305 / FindBugs的一部分: http//findbugs.sourceforge.net/manual/annotations.html

我認為從你添加的鏈接中可以清楚地看出:如果使用@CheckForNull並且使用該值的代碼不檢查null ,則FindBugs會將其顯示為錯誤。

FindBugs會忽略@Nullable

實際上,此注釋僅用於覆蓋總體NonNull注釋。

在必須始終檢查值的情況下使用@CheckForNull 使用@Nullable ,其中null可能沒問題。

編輯:似乎@CheckForNull目前還沒有得到很好的支持,所以我建議避免它並使用@NonNull (也請參閱我應該使用哪個@NotNull Java注釋? )。 另一個想法是直接與FindBugs開發人員取得聯系,並詢問他們對文檔中不一致的看法。

IntelliJ IDEA正確處理@Nonnull@Nullable FindBugs發現了@Nonnull的問題但錯過了@Nullable@CheckForNUll IDEA和FindBugs檢測到的問題都標有注釋。

package com.db.icestation;

import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class test {

    @Nullable public String nullable() {
        return "";
    }

    @Nonnull public String nonnull() {
        return null; // IDEA, findbugs
    }

    @CheckForNull public String checkForNull() {
        return null;
    }

    public static void main(String[] args) {
        System.out.println(new test().nullable().length()); // IDEA
        System.out.println(new test().nonnull().length());
        System.out.println(new test().checkForNull().length());
    }
}

在IntelliJ Idea @javax.annotation.Nullable ,默認情況下支持@javax.annotation.Nullable ,任何取消引用@Nullable參數或返回值的嘗試都將導致警告。

@ alexander-pavlov,您可以在“常量條件和例外”檢查的配置中添加@javax.annotation.CheckForNull Go File-> Settings-> Inspections-> Probable bugs-> Constant conditions&exceptions-> Configure annotations。

我更喜歡這樣做,因為@CheckForNull@Nullable更清晰,因為@lbalazscs在上面的回答中提到過。

暫無
暫無

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

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