Anda dapat menggunakan Map statis di enum yang memetakan Strings ke konstanta enum. Gunakan dalam metode statis 'getEnum'. Ini menghilangkan kebutuhan untuk mengulang melalui enum setiap kali Anda ingin mendapatkannya dari nilai String-nya.
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;
}
}
Pastikan saja inisialisasi statis peta terjadi di bawah deklarasi konstanta enum.
BTW - tipe 'ImmutableMap' itu berasal dari Google guava API, dan saya merekomendasikannya dalam kasus seperti ini.
EDIT - Per komentar:
- Solusi ini mengasumsikan bahwa setiap nilai string yang ditetapkan adalah unik dan bukan nol. Mengingat bahwa pembuat enum dapat mengontrol ini, dan bahwa string tersebut sesuai dengan nilai enum unik & non-null, ini tampak seperti pembatasan yang aman.
- Saya menambahkan metode 'toSTring ()' seperti yang diminta dalam pertanyaan