La respuesta de @ Lyle es bastante peligrosa y he visto que no funciona particularmente si hace que la enumeración sea una clase interna estática. En cambio, he usado algo como esto que cargará los mapas BootstrapSingleton antes de las enumeraciones.
Editar esto ya no debería ser un problema con las JVM modernas (JVM 1.6 o superior), pero creo que todavía hay problemas con JRebel, pero no he tenido la oportunidad de volver a probarlo .
Cargame primero:
public final class BootstrapSingleton {
// Reverse-lookup map for getting a day from an abbreviation
public static final Map<String, Day> lookup = new HashMap<String, Day>();
}
Ahora cárguelo en el constructor enum:
public enum Day {
MONDAY("M"), TUESDAY("T"), WEDNESDAY("W"),
THURSDAY("R"), FRIDAY("F"), SATURDAY("Sa"), SUNDAY("Su"), ;
private final String abbreviation;
private Day(String abbreviation) {
this.abbreviation = abbreviation;
BootstrapSingleton.lookup.put(abbreviation, this);
}
public String getAbbreviation() {
return abbreviation;
}
public static Day get(String abbreviation) {
return lookup.get(abbreviation);
}
}
Si tiene una enumeración interna, puede definir el Mapa sobre la definición de enumeración y eso (en teoría) debería cargarse antes.
stringMap
inicialización). La solución habitual es usar una clase anidada.