열거 형 상수에 문자열을 매핑하는 정적 맵을 열거 형에 사용할 수 있습니다. 'getEnum'정적 메소드에서 사용하십시오. 이렇게하면 문자열 값에서 하나를 가져 오려고 할 때마다 열거 형을 반복 할 필요가 없습니다.
public enum RandomEnum {
StartHere("Start Here"),
StopHere("Stop Here");
private final String strVal;
private RandomEnum(String strVal) {
this.strVal = strVal;
}
public static RandomEnum getEnum(String strVal) {
if(!strValMap.containsKey(strVal)) {
throw new IllegalArgumentException("Unknown String Value: " + strVal);
}
return strValMap.get(strVal);
}
private static final Map<String, RandomEnum> strValMap;
static {
final Map<String, RandomEnum> tmpMap = Maps.newHashMap();
for(final RandomEnum en : RandomEnum.values()) {
tmpMap.put(en.strVal, en);
}
strValMap = ImmutableMap.copyOf(tmpMap);
}
@Override
public String toString() {
return strVal;
}
}
맵의 정적 초기화가 열거 형 상수 선언 아래에서 발생하는지 확인하십시오.
BTW- 'ImmutableMap'유형은 Google 구아바 API에서 가져온 것이며, 이런 경우에는 확실히 추천합니다.
편집-댓글에 따라 :
- 이 솔루션은 할당 된 각 문자열 값이 고유하고 null이 아니라고 가정합니다. 열거 형의 작성자가 이것을 제어 할 수 있고 문자열이 고유하고 null이 아닌 열거 형 값에 해당한다는 점을 감안할 때 이것은 안전한 제한처럼 보입니다.
- 질문에서 요청한대로 'toSTring ()'메서드를 추가했습니다.