[英]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.