Odpowiedź @ Lyle jest raczej niebezpieczna i widziałem, że nie działa, szczególnie jeśli uczynisz enum statyczną klasą wewnętrzną. Zamiast tego użyłem czegoś takiego, który załaduje mapy BootstrapSingleton przed wyliczeniami.
Edycja tego nie powinna już stanowić problemu w przypadku nowoczesnych maszyn JVM (JVM 1.6 lub nowszych), ale myślę, że nadal występują problemy z JRebel, ale nie miałem okazji go ponownie przetestować .
Załaduj mnie najpierw:
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>();
}
Teraz załaduj go do konstruktora wyliczenia:
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);
}
}
Jeśli masz wewnętrzne wyliczenie, możesz po prostu zdefiniować Mapę powyżej definicji wyliczenia i to (teoretycznie) powinno zostać załadowane wcześniej.
stringMap
inicjalizacji). Typowym rozwiązaniem jest użycie klasy zagnieżdżonej.