2013-04-21 3 views
0

Я хочу использовать 2 из этого перечисления, прежде всего в какой-то момент эти значения int выйдут из базы данных. Не изменяя конструктор, я хотел бы получить от него удобное для пользователя имя, например, если объект содержит INS, я хочу, чтобы один из методов в перечислении возвращал «Страхование». Как добавить такие методы к этому enum (без изменения конструктора), что даст программисту техническое имя, например «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

Override 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

+0

@Phoenix Вызывая 'toString()' на члене вашего перечисления. Это делается по умолчанию, когда экземпляры печатаются или добавляются к строкам. – ApproachingDarknessFish

Смежные вопросы