Pourquoi ne peut-enum constructeur de l'accès aux champs statiques?

Pourquoi ne peut-enum constructeur de l'accès aux champs statiques et les méthodes? C'est parfaitement valide avec une classe, mais il n'est pas permis avec un enum.

Ce que je suis en train de faire est de stocker mes énumérer les instances dans une Carte statique. Prenons cet exemple de code qui permet la recherche par 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);
    }
}

Cela ne fonctionne pas comme enum ne permet pas de faire des références statiques dans son constructeur. Il fonctionne cependant il suffit de trouver si elles sont appliquées comme une classe:

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 Steve Kuo | 2009-01-14