Ви можете використовувати статичну карту в перерахунку, яка відображає рядки для констант перерахунку. Використовуйте його в статичному методі "getEnum". Це пропускає необхідність ітерації через перерахунки щоразу, коли ви хочете отримати одне зі свого значення String.
public enum RandomEnum {
StartHere("Start Here"),
StopHere("Stop Here");
private final String strVal;
private RandomEnum(String strVal) {
this.strVal = strVal;
}
public static RandomEnum getEnum(String strVal) {
if(!strValMap.containsKey(strVal)) {
throw new IllegalArgumentException("Unknown String Value: " + strVal);
}
return strValMap.get(strVal);
}
private static final Map<String, RandomEnum> strValMap;
static {
final Map<String, RandomEnum> tmpMap = Maps.newHashMap();
for(final RandomEnum en : RandomEnum.values()) {
tmpMap.put(en.strVal, en);
}
strValMap = ImmutableMap.copyOf(tmpMap);
}
@Override
public String toString() {
return strVal;
}
}
Просто переконайтеся, що статична ініціалізація карти відбувається нижче декларації констант enum.
BTW - тип "ImmutableMap" походить від API guava Google, і я, безумовно, рекомендую його у таких випадках.
EDIT - За коментарями:
- Це рішення передбачає, що кожне призначене значення рядка є унікальним і недійсним. Зважаючи на те, що творець enum може керувати цим і що рядок відповідає унікальному & ненульовому значенню enum, це здається безпечним обмеженням.
- Я додав метод 'toSTring ()', як про це було задано у запитанні