Puede usar un mapa estático en su enumeración que asigna cadenas a constantes de enumeración. Úselo en un método estático 'getEnum'. Esto evita la necesidad de recorrer las enumeraciones cada vez que desee obtener una de su valor de cadena.
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;
}
}
Solo asegúrese de que la inicialización estática del mapa ocurra debajo de la declaración de las constantes enum.
Por cierto, ese tipo 'ImmutableMap' es de la API de guayaba de Google, y definitivamente lo recomiendo en casos como este.
EDITAR - Por los comentarios:
- Esta solución supone que cada valor de cadena asignado es único y no nulo. Dado que el creador de la enumeración puede controlar esto, y que la cadena corresponde al valor de enumeración único y no nulo, esto parece una restricción segura.
- Agregué el método 'toSTring ()' como se solicitó en la pregunta