열거 형의 생성자가 정적 필드 및 메서드에 액세스 할 수없는 이유는 무엇입니까? 이것은 클래스에서 완벽하게 유효하지만 열거 형에서는 허용되지 않습니다.
내가하려는 것은 정적 맵에 열거 형 인스턴스를 저장하는 것입니다. 약어로 조회 할 수있는 다음 예제 코드를 고려하십시오.
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
}