2014-01-10 63 views
5

這部分代碼被拒絕通過聲納pmd的:避免字面量如果條件

public String getFoo() { 
    String foo = System.getProperty("foo"); 

    if (foo == null) { 
     foo = System.getenv("foo"); 
    } else if (foo == null) { 
     foo = "defaultFoo"; 
    } 

    return foo; 
} 

它說:「避免字面量如果條件」。有人能告訴我這有什麼問題嗎?或者這個規則試圖實現什麼?

+1

BTW第二,如果是完全無用的,因爲你想檢查的東西,是在條件語句中使用硬編碼的文字之前 – ITroubs

+1

避免檢查,這些聲明爲static變量或私有成員。 – Kick

+1

我編輯了問題並刪除了未使用的部分,因爲答案都集中在錯誤的部分 –

回答

3

Sonar試圖說的是,您應該避免if條件中的硬編碼文字(如null)。

假設下面的例子:

比方說,我們有這個if聲明,對於其聲納與避免字面量如果條件警告:

if (i == 5) { 
    //do something 
} 

通過聲明的硬編碼的文字爲(final)具有描述性名稱可變性的可變性得到增強:

final int FIVE = 5; 
if (i == FIVE) { 
    //do something 
} 

和聲納不再警告。

+0

如何將null聲明爲最終變量? –

+0

'final Object NULL = null;'? –

+3

是的,這是原因。但在這種情況下,我想我會刪除這條規則。 –