Tại sao hàm tạo của enum không thể truy cập các trường và phương thức tĩnh? Điều này hoàn toàn hợp lệ với một lớp, nhưng không được phép với một enum.
Những gì tôi đang cố gắng làm là lưu trữ các phiên bản enum của tôi trong một Bản đồ tĩnh. Hãy xem xét mã ví dụ này cho phép tra cứu theo cách viết tắt:
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);
}
}
Điều này sẽ không hoạt động vì enum không cho phép các tham chiếu tĩnh trong phương thức khởi tạo của nó. Tuy nhiên, nó hoạt động chỉ cần tìm nếu được triển khai dưới dạng một lớp:
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
}