2017-08-15 78 views
0

我有一個枚舉類與幾個關鍵。 許多鍵應具有相同的字符串值。 聲納向我大吼,用相同的值替換相同的字符串值。Java:我可以使用常量字符串作爲枚舉鍵值嗎?

例如:

public enum MESSAGE_TYPES { 

KEY1("Val1"), 
KEY2("Val2"), 
KEY3("Val3"), 
KEY4("Val2"), 
KEY5("Val4"), 
KEY6("Val2"), 
//etc. 

} 

因此,聲納希望我:

定義,而不是重複這個字面常量...

爲 「值2」,因爲它被定義3次或更多次。 我該如何做到這一點?

將該值自動提取到常量會使其位於枚舉鍵之後,但是枚舉鍵的值當然不會識別它。 所以,我試圖把它的枚舉類

public enum MESSAGE_TYPES { 

    private static final String VAL2 = "Val2"; 

    KEY1("Val1"), 
    KEY2(VAL2), 
... 
} 

等我上線「語法錯誤」的錯誤之上。

請指教。

謝謝!

+0

https://stackoverflow.com/questions/23608885/how-to-define-static-constants-in-a-java-enum#23609178我認爲這可以幫助你:) –

+0

無關:閱讀關於Java命名修道院。枚舉CONSTANTS變成大寫,但枚舉類的名稱......就像普通的**類**名稱,因此它應該是MessageTypes,例如! – GhostCat

回答

4

在聲明枚舉值之前,不能在枚舉類中聲明static字段。
並聲明static後枚舉值將不允許在枚舉構造函數中使用它們。
因此,只需在類中提取String值並在枚舉值聲明中引用它們即可。

例如:

public final class MyMessageConstant{ 

    public static final String VAL1 = "Val2"; 
    public static final String VAL2 = "Val2"; 

    private MyMessageConstant(){ 
    } 
} 

而且枚舉:

public enum MESSAGE_TYPES { 

    KEY1(MyMessageConstant.VAL1), 
    KEY2(MyMessageConstant.VAL2), 
... 
} 

如果它是有道理的,以保持String值私有的枚舉類,你可以聲明常量類作爲枚舉的private static final類成員:

public enum Types { 

    KEY1(MyMessageConstant.VAL1), KEY2(MyMessageConstant.VAL2),... 
    KEY4(MyMessageConstant.VAL2), 

    private static final class MyMessageConstant {   
     private static final String VAL1 = "Val2"; 
     private static final String VAL2 = "Val2";   
     private MyMessageConstant() {} 
    } 

    private String value; 

    private Types(String value) { 
     this.value = value; 
    } 

} 
+0

我也有問題相關的枚舉[這裏](https://stackoverflow.com/questions/47956136/how-can-i-represent-key-with-list-of-values-for-each-environment-type-在-AN-枚舉/)。希望看看我們是否可以用枚舉來輕鬆表示。 – user1950349

+0

我做了一個相當清楚和很好的問題的答案。 – davidxxx

相關問題