2015-02-09 91 views
1

採用以下方法,什麼是不必要的測試null意味着什麼?

public void setDescription(final String description) { 

    this.description = description; 

    if (this.description == null || this.description.isEmpty()) { 
     this.description = "[description]"; 
    } 
} 

的NetBeans顯示了this.description == null部分說

對空不必要的測試的暗示 - 表達永遠不能爲null

這是什麼意思?我錯過了什麼?


UPDATE

我有相同的(那種)暗示另一種情況。

class User { 

    public void setUsername(final String username) { 
     if (this.username != null) { // <-- right here! 
      throw new IllegalStateException(
       "already has a username"); 
     } 
     this.username = username; 
    } 

    @NotNull 
    private String username; 
} 

NetBeans顯示部分this.username != null的文本相同的提示。在這種情況下,NetBeans監督@NotNull。如果您有興趣,請追蹤以下問題。

https://netbeans.org/bugzilla/show_bug.cgi?id=262707

+0

NetBeans顯示此消息,因爲這意味着字符串永遠不會爲空,並且您可以刪除此檢查。但我不能說爲什麼。 – Jens 2015-02-09 07:19:21

+0

告訴我們你如何調用'setDescription()' – TheLostMind 2015-02-09 07:22:16

+4

我會說這是一個錯誤,應該被忽略。除非這個方法是私有的,否則Netbeans不可能知道它已經看到了所有的呼叫站點,因此也無法知道這個參數是否爲空。 OTOH是一個非常奇怪的代碼。你已經把一個明確的'null'改成了一個不明確的''[description]「'。 – EJP 2015-02-09 07:23:49

回答

2

您所描述的行爲與Bug 226923 - Wrong warning 'the expression is never null'有關。

應該修補bug直到netbeans 7.3.1。我在netbeans 8.0.2中測試你的代碼,並且沒有提示出現。

+0

新一代同類。 https://netbeans.org/bugzilla/show_bug.cgi?id=262707 – 2016-07-18 11:35:27