@ A resposta de Lyle é bastante perigosa e vi que não funcionará particularmente se você fizer do enum uma classe interna estática. Em vez disso, usei algo assim, que carregará os mapas BootstrapSingleton antes das enumerações.
Editar isso não deve mais ser um problema com as JVMs modernas (JVM 1.6 ou superior), mas acho que ainda existem problemas com o JRebel, mas não tive a chance de testá-lo novamente .
Carregue-me primeiro:
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>();
}
Agora carregue-o no construtor 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);
}
}
Se você tem uma enumeração interna, basta definir o Mapa acima da definição de enumeração e que (em teoria) deve ser carregado antes.
stringMap
inicialização). A solução usual é usar uma classe aninhada.