簡體   English   中英

如何將@CheckForNull等與Findbugs一起使用?

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

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