2013-04-21 122 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