Statische Initialisierung vor Enum -Elementen

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Statische Initialisierung vor Enum -Elementen

by Anonymous » 12 Jul 2025, 23:05

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.>

Top