文字列を列挙型定数にマップする列挙型で静的マップを使用できます。'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;
}
}
マップの静的な初期化が列挙定数の宣言の下で発生することを確認してください。
ところで、その 'ImmutableMap'タイプはGoogle guava APIからのものであり、このような場合は絶対にお勧めします。
編集-コメントごと:
- このソリューションは、割り当てられた各文字列値が一意であり、nullでないことを前提としています。列挙型の作成者がこれを制御でき、文字列が一意のnull以外の列挙値に対応している場合、これは安全な制限のようです。
- 質問で尋ねられたように「toSTring()」メソッドを追加しました