how to convert "value" to enum?

I have this enum class:

public enum IconImageTag {

    None("val1"),
    USD("val2"),
    EURO("val3");
}

given a string which represent a "value" (say `"val"1)

how can I convert it to the corresponding enum?

update

I have tried this. Why is this illegal to access static member from the ctor? I get an error.

  private final String value;
    private static final Map<String, IconImageTag> stringToEnumMap = new HashMap<>();

    IconImageTag(String value) {
        this.value = value;
        stringToEnumMap.put(value, this);
    }
Jon Skeet
people
quotationmark

Ideally, you'd build up a Map<String, IconImageTag> and add an appropriate method. For example:

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

(I'd probably use a different term from "value" here, to avoid confusion with valueOf() etc...)

Note the use of the static initializer block - any static variables in an enum are initialized after the enum values themselves, which means that when the enum constructor runs, valueMap will still be null.

people

See more on this question at Stackoverflow