@ Lyles Antwort ist ziemlich gefährlich und ich habe gesehen, dass es nicht besonders funktioniert, wenn Sie die Aufzählung zu einer statischen inneren Klasse machen. Stattdessen habe ich so etwas verwendet, das die BootstrapSingleton-Maps vor den Aufzählungen lädt.
Bearbeiten Dies sollte mit modernen JVMs (JVM 1.6 oder höher) kein Problem mehr sein, aber ich denke, es gibt immer noch Probleme mit JRebel, aber ich hatte keine Chance, es erneut zu testen .
Lade mich zuerst:
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>();
}
Laden Sie es nun in den Enum-Konstruktor:
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);
}
}
Wenn Sie eine innere Aufzählung haben, können Sie einfach die Karte über der Aufzählungsdefinition definieren und diese sollte (theoretisch) vorher geladen werden.
stringMap
Initialisierung führen). Die übliche Lösung besteht darin, eine verschachtelte Klasse zu verwenden.