我有这个枚举类:
public enum IconImageTag {
None("val1"),
USD("val2"),
EURO("val3");
}
给出一个代表"value"
的字符串(比如说'" val" 1)
如何将其转换为相应的枚举?
更新
我试过这个。为什么从ctor访问静态成员是非法的?我收到了错误。
private final String value;
private static final Map<String, IconImageTag> stringToEnumMap = new HashMap<>();
IconImageTag(String value) {
this.value = value;
stringToEnumMap.put(value, this);
}
答案 0 :(得分:5)
理想情况下,您需要构建Map<String, IconImageTag>
并添加适当的方法。例如:
public enum IconImageTag {
NONE("val1"),
USD("val2"),
EURO("val3");
private final String value;
private final Map<String, IconImageTag> valueMap = new HashMap<>();
static {
for (IconImageTag tag : values()) {
valueMap.put(tag.value, tag);
}
}
private IconImageTag(String value) {
this.value = value;
}
public static IconImageTag fromValue(String value) {
return valueMap.get(value);
}
}
(我可能会在这里使用与“值”不同的术语,以避免与valueOf()
等混淆...)
注意静态初始化程序块的使用 - 在枚举值本身后,枚举中的任何静态变量,这意味着当枚举构造函数运行时,valueMap
仍将是空。
答案 1 :(得分:0)
您还可以迭代每个枚举。
public enum IconImageTag {
None("val1"),
USD("val2"),
EURO("val3");
private final String value;
private IconImageTag(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public static IconImageTag getByValue(String value) {
for(IconImageTag iconImageTag : values()) {
if(iconImageTag.getValue().equals(value)) {
return iconImageTag;
}
}
return null;
}