Вы можете использовать имя перечисления для хранения и извлечения.
types.valueOf("FOO")
должно доставить types.FOO
, а types.FOO.name()
дает вам имя перечисления.
Если вы хотитеполучить его с помощью переменной-члена, вы можете сделать что-то вроде этого:
public static Types byValue(final int value) {
Types returnvalue = FOO; // default returnvalue
for (final Types type : Types.values()) {
if (type.value == value) {
returnvalue = type;
break;
}
}
return returnvalue;
}
Если это критично для производительности, вы можете поместить все типы в статическую карту с ключом 'value'.Тогда вам не нужен цикл и произнесите только valueMap.get(value)
.Карта должна быть инициализирована в статическом блоке в перечислении.
Для дополнительного текстового значения вы можете присвоить перечислению вторую переменную-член типа String с геттером.Таким образом, связанные значения int и String находятся только в инициализации.
Например,
FOO(0,"Hello I'm Foo"),
BAA(1,"Hello I'm Baa"),
...