Вы можете использовать статическую карту в своем перечислении, которая сопоставляет строки с константами перечисления. Используйте его в статическом методе 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;
}
}
Просто убедитесь, что статическая инициализация карты происходит под объявлением констант перечисления.
Кстати, этот тип ImmutableMap взят из Google guava API, и я определенно рекомендую его в подобных случаях.
РЕДАКТИРОВАТЬ - Согласно комментариям:
- Это решение предполагает, что каждое присвоенное строковое значение уникально и не равно нулю. Учитывая, что создатель перечисления может управлять этим, и что строка соответствует уникальному и ненулевому значению перечисления, это кажется безопасным ограничением.
- Я добавил метод toSTring (), как просили в вопросе