Warum kann der Konstruktor von enum nicht auf statische Felder zugreifen?

Warum kann nicht enum-Konstruktor Zugriff auf statische Felder und Methoden? Dies ist vollkommen gültig mit einer Klasse, darf jedoch nicht mit einem enum.

Was ich versuche zu tun, ist meine enum-Instanzen in einer statischen Karte. Betrachten Sie das folgende Beispiel-code, das ermöglicht die Suche nach abbreivation:

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<String, Day> ABBREV_MAP = new HashMap<String, Day>();

    private Day(String abbreviation) {
        this.abbreviation = abbreviation;
        ABBREV_MAP.put(abbreviation, this);  //Not valid
    }

    public String getAbbreviation() {
        return abbreviation;
    }

    public static Day getByAbbreviation(String abbreviation) {
        return ABBREV_MAP.get(abbreviation);
    }
}

Diese wird nicht als enum erlaubt keine statische Referenz in den Konstruktor. Es jedoch funktioniert nur finden, wenn Sie umgesetzt werden, wie eine Klasse:

public static final Day SUNDAY = new Day("Sunday", "Sun");
private Day(String name, String abbreviation) {
    this.name = name;
    this.abbreviation = abbreviation;
    ABBREV_MAP.put(abbreviation, this);  //Valid
}

InformationsquelleAutor der Frage Steve Kuo | 2009-01-14

Schreibe einen Kommentar