2013-04-21 134 views
0

我想從這個枚舉中取出2個用法,首先在某些時候這些int值將從數據庫中出來。在不修改構造函數的情況下,我想從中獲得一個用戶友好的名稱,如果對象包含INS,我希望enum上的某個方法返回「Insurance」。如何將此類方法添加到此枚舉(不修改構造函數),這將給程序員技術名稱,如「HCARE」和用戶友好名稱「保險」。另外,想知道在從數據庫中獲取用戶友好名稱時需要做哪些更改?使用Java枚舉

public enum Type 
{ 
    UNDEF(-1), 
    HCARE(1), 
    INS(2); 

    private int value; 

    Type(final int value) 
    { 
     this.value = value; 
    } 

} 

回答

1

您可以添加一個方法來獲取用戶友好的名稱從數據庫(可能將其高速緩存),或從別的地方開始(例如資源文件)。

由於我們在此討論顯示名稱,我還添加了Locale參數,因此它可以支持多種語言。

public enum Type 
{ 
    UNDEF(-1), 
    HCARE(1), 
    INS(2); 

    private int value; 

    Type(final int value) 
    { 
     this.value = value; 
    } 

    public String getNiceName(Locale l){ 
     // look at my id and code and use that to look up the name 
     return NiceNameManager.nameForType(this, l); 
    } 
} 
1

toString改寫爲每個成員:

public enum Type 
{ 
    UNDEF(-1) 
    { 
     public String toString(){ return "Friendly name here"; } 
    }, 
    HCARE(1) 
    { 
     public String toString(){ return "Friendly name here"; } 
    }, 
    INS(2) 
    { 
     public String toString(){ return "Insurance"; } 
    }; 

    private int value; 

    Type(final int value) 
    { 
     this.value = value; 
    } 

    public abstract String toString(); 

} 

文檔說「枚舉類型應該重寫[的toString]時更加‘程序員友好的’字符串形式存在。」

+0

如何從數據庫中獲得「保險」? – Phoenix 2013-04-21 23:46:42

+0

@Phoenix通過調用枚舉成員上的'toString()'。當實例被打印或附加到字符串時,這是默認完成的。 – ApproachingDarknessFish 2013-04-21 23:50:08