Mengapa konstruktor enum tidak dapat mengakses bidang dan metode statis? Ini benar-benar valid dengan kelas, tetapi tidak diperbolehkan dengan enum.
Apa yang saya coba lakukan adalah menyimpan contoh enum saya di Peta statis. Pertimbangkan kode contoh ini yang memungkinkan pencarian dengan singkatan:
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);
}
}
Ini tidak akan berfungsi karena enum tidak mengizinkan referensi statis dalam konstruktornya. Namun itu berfungsi hanya menemukan jika diimplementasikan sebagai kelas:
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
}