如何转换"价值"枚举?

时间:2015-04-16 13:56:37

标签: java string enums

我有这个枚举类:

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);
    }

2 个答案:

答案 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;
}