如何将"value"转换为枚举?

Ela*_*da2 -5 java string enums

我有这个枚举类:

public enum IconImageTag {

    None("val1"),
    USD("val2"),
    EURO("val3");
}
Run Code Online (Sandbox Code Playgroud)

给出一个代表一个字符串"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);
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

(我可能在这里使用与"价值"不同的术语,以避免与其他人混淆valueOf()......)

注意静态初始化程序块的使用 - 枚举值本身之后初始化枚举中的任何静态变量,这意味着当枚举构造函数运行时,valueMap仍将为null.