@ Lyle의 답변은 다소 위험합니다. 특히 열거 형을 정적 인 내부 클래스로 만들면 작동하지 않습니다. 대신 나는 enums 전에 BootstrapSingleton 맵을로드하는 이와 같은 것을 사용했다.
편집이 더 이상 현대의 JVM에 문제 (JVM 1.6 이상을) 안하지만 난 거기에 JRebel 문제가 여전히하지만 난 그것을을 다시 테스트 할 기회가 없었어요 생각하십니까.
나를 먼저로드 :
public final class BootstrapSingleton {
// Reverse-lookup map for getting a day from an abbreviation
public static final Map<String, Day> lookup = new HashMap<String, Day>();
}
을 지금 열거 생성자에서로드 :에 (당신이 내부 열거가있는 경우
public enum Day {
MONDAY("M"), TUESDAY("T"), WEDNESDAY("W"),
THURSDAY("R"), FRIDAY("F"), SATURDAY("Sa"), SUNDAY("Su"), ;
private final String abbreviation;
private Day(String abbreviation) {
this.abbreviation = abbreviation;
BootstrapSingleton.lookup.put(abbreviation, this);
}
public String getAbbreviation() {
return abbreviation;
}
public static Day get(String abbreviation) {
return lookup.get(abbreviation);
}
}
방금 열거 정의 위의지도를 정의하고 있습니다 이론)은 전에로드되어야합니다.
IIRC. 정적 초기화가 위에서 아래로 이루어지기 때문에 (즉, 상단의 열거 형 상수가'stringMap' 초기화까지 내려 가기 때문에) NPE를 제공합니다. 일반적인 해결책은 중첩 된 클래스를 사용하는 것입니다. –
빠른 응답을 주신 모든 분들께 감사드립니다. (FWIW 나는 Sun Javadocs가이 문제에 매우 유용하다는 것을 발견하지 못했다.) –
정말 라이브러리 문제보다 언어 문제입니다. 그러나, API 문서는 JLS (아마도 언어 디자이너가 아닐지라도)보다 더 많이 읽혀 지므로, 이와 같은 것들이 java.lang 문서에서 더 두드러 질 것입니다. –