Enum'un kurucusu neden statik alanlara ve yöntemlere erişemiyor? Bu, bir sınıf için mükemmel bir şekilde geçerlidir, ancak bir enum ile izin verilmez.
Yapmaya çalıştığım şey, numaralandırma örneklerimi statik bir Haritada depolamak. Kısaltmaya göre aramaya izin veren şu örnek kodu düşünün:
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);
}
}
Bu, enum yapıcısında statik referanslara izin vermediğinden çalışmaz. Ancak, bir sınıf olarak uygulanıp uygulanmadığını bulmak için çalışır:
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
}