เหตุใดตัวสร้างของ enum จึงไม่สามารถเข้าถึงฟิลด์และเมธอดแบบคงที่ได้? สิ่งนี้ใช้ได้กับคลาส แต่ไม่อนุญาตให้ใส่ enum
สิ่งที่ฉันพยายามทำคือจัดเก็บอินสแตนซ์ enum ของฉันไว้ในแผนที่แบบคงที่ พิจารณาโค้ดตัวอย่างนี้ซึ่งช่วยให้สามารถค้นหาได้โดยการย่อ:
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);
}
}
สิ่งนี้จะไม่ทำงานเนื่องจาก enum ไม่อนุญาตให้มีการอ้างอิงแบบคงที่ในตัวสร้าง อย่างไรก็ตามมันใช้งานได้เพียงแค่ค้นหาว่าใช้งานเป็นคลาส:
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
}