Es ist nicht möglich, vor der Initialisierung von Enum -Elementen in Java eine statische Initialisierung vorzunehmen, da Enum -Elemente immer zuerst deklariert und initialisiert werden müssen. Wenn eine Initialisierung von Enum -Elementen abhängt, würde dies ansonsten zu Problemen führen. Java Enums bieten jedoch die Werte () -Methode an, die diese Abhängigkeit erfüllen kann. Das Aufrufen von Values () kann jedoch ein Overhead sein, da die Werte () das interne statische Array jedes Mal kopiert.public enum Day {
SUNDAY("Sun"), MONDAY("Mon"), TUESDAY("Tue"), WEDNESDAY("Wed"), THURSDAY("Thu"), FRIDAY("Fri"), SATURDAY("Sat");
private final String abbreviation;
private static final Map ABBREV_MAP = new HashMap();
static
{
for(Day day:values())
ABBREV_MAP.put(day.abbreviation, day);
}
private Day(String abbreviation) {
this.abbreviation = abbreviation;
//ABBREV_MAP.put(abbreviation, this); this is not valid
}
public String getAbbreviation() {
return abbreviation;
}
public static Day getByAbbreviation(String abbreviation) {
return ABBREV_MAP.get(abbreviation);
}
}
< /code>
Wie im Beispiel zu sehen, würde ich keinen statischen Initialisierungscode -Block benötigen, weshalb die Werte () -Methode () aufgerufen wird, die eine Kopie erstellt, wenn ich HashMap vor Enum -Elementen initialisieren könnte. Der im Konstruktor kommentierte Code wäre ausreichend. Wenn nicht, ist es nur aus Gründen der Code -Lesbarkeit? Ich nehme an, dass das Deklarieren von Enum -Elementen zuerst nichts mit einer sicheren Initialisierung zu tun hat, wie in einigen Antworten erwähnt.>
Statische Initialisierung vor Enum -Elementen ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post