Bạn có thể sử dụng một Bản đồ tĩnh trong enum của mình để ánh xạ Chuỗi thành hằng số enum. Sử dụng nó trong một phương thức tĩnh 'getEnum'. Điều này bỏ qua sự cần thiết phải lặp qua các enum mỗi khi bạn muốn lấy một từ giá trị Chuỗi của nó.
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;
}
}
Chỉ cần đảm bảo rằng quá trình khởi tạo tĩnh của bản đồ xảy ra bên dưới phần khai báo các hằng số enum.
BTW - loại 'ImmutableMap' đó là từ API ổi của Google và tôi chắc chắn khuyên bạn nên sử dụng nó trong những trường hợp như thế này.
CHỈNH SỬA - Theo nhận xét:
- Giải pháp này giả định rằng mỗi giá trị chuỗi được gán là duy nhất và không rỗng. Cho rằng người tạo enum có thể kiểm soát điều này và chuỗi tương ứng với giá trị enum duy nhất & không null, điều này có vẻ như là một hạn chế an toàn.
- Tôi đã thêm phương thức 'toSTring ()' như được yêu cầu trong câu hỏi