[英]How to use FindBugs’ @CheckForNull, @Nonnull and @Nullable annotations correctly
[英]How do I use @CheckForNull etc with Findbugs?
當我通過Findbugs運行此命令時,會收到警告:
static @NonNull Object foo(@CheckForNull Object arg) {
if (arg == null) { // warning on this line
throw new NullPointerException();
}
return "something";
}
警告的詳細信息如下:
錯誤:
arg
必須為非空但被標記為可為空
模式ID:NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE
,類型:NP
,類別:STYLE
始終以要求該參數為非null的方式使用該參數,但是該參數已明確注釋為
Nullable
。 使用參數或注釋是錯誤的。
有人可以解釋一下Findbugs在抱怨什么嗎?
請注意,我使用的是edu.umd.cs.findbugs.annotations.*
成員,而不是javax.annotations.*
。 (有區別嗎?)
設置用於Eclipse 3.6.1的FindBugs插件1.3.9.2009-。
Matthew Flaschen建議我改用@NonNull
,但現在遇到了這個問題:
static void blah(@NonNull Object arg) {
if (arg == null) {
throw new NullPointerException();
}
System.out.println(arg);
}
static @CheckForNull Object bleh() {
return null;
}
//...
blah(bleh()); // warning here!
警告的詳細信息是:
錯誤:可能由於調用方法的返回值而導致空指針取消引用
模式ID:NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE
,類型:NP
,類別:STYLE
取消引用方法的返回值時不進行
null
檢查,並且通常應檢查該方法的返回值是否為null
。 執行代碼時,這可能導致NullPointerException
。
我基本上要blah
,以滿足@CheckForNull
要求,但我不能這樣做,如果我做出ARG是@NonNull
。 我該如何工作?
你自相矛盾。 CheckForNull
意思是“帶注釋的元素可能為空”,但是如果是,則立即拋出。
如果調用者永遠無法接受傳遞null,我相信您應該對其進行注釋:
static @NonNull Object foo(@NonNull Object arg) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.