2013-02-18 70 views
0

實施例的存取:最後字段代替枚舉

public enum TestEnum { 
    FOO(4), BAR(7); 

    public final int externalValue; 

    private TestEnum(int externalValue) { 
     this.externalValue = externalValue; 
    } 
} 

通知如何沒有getExternalValue()方法。由於externalValue字段是最終的,因此沒有修改的風險。通過Sonar像這樣運行代碼給了我一個「變量」externalValue'必須是私有的並且有訪問器方法「的錯誤。

假設我是一個總的白癡,並解釋:爲什麼我絕對需要實現和使用externalValue訪問器?

這很難解釋爲什麼,但是Java Bean模式從一個聰明的構造變成一個普遍規律的方式,總讓我感到不安。我只是覺得它不應該總是有必要的。

+2

這看起來像一個聲納特定的問題,而不是一個Java。 – 2013-02-18 12:15:44

+0

根據Java,這不是一個錯誤;它必須是由Sonar執行的東西。 – Thevenin 2013-02-18 12:19:20

回答

1

聲納規則在這種情況下是錯誤的;它甚至不可能符合JavaBean規範(因爲它需要公共構造函數)

這總是會發生在靜態代碼分析器中;您可以使用// NOSONAR評論或@SuppressWarnings註釋選擇性地禁用某些警告。

+0

我認爲這是我想聽到的。 :)我只是認爲,如果一個枚舉常量具有訪問器的公共final字段是可以的,那麼相應地調整Sonar中的檢查應該不會那麼困難。 – 2013-02-18 12:31:14

0

如果你看到官方documentation

每個實例最終變量聲明私營和他們的存取定義。那麼,可能只是這樣嗎?