Pourquoi le constructeur d'énumération ne peut-il pas accéder aux champs et méthodes statiques? Ceci est parfaitement valable avec une classe, mais n'est pas autorisé avec une énumération.
Ce que j'essaie de faire est de stocker mes instances enum dans une carte statique. Considérez cet exemple de code qui permet la recherche par abréviation:
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 fonctionnera pas car enum n'autorise pas les références statiques dans son constructeur. Cela fonctionne cependant juste trouver s'il est implémenté en tant que 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
}