How to get an enum value from a string value in Java How to get an enum value from a string value in Java java java

How to get an enum value from a string value in Java


Yes, Blah.valueOf("A") will give you Blah.A.

Note that the name must be an exact match, including case: Blah.valueOf("a") and Blah.valueOf("A ") both throw an IllegalArgumentException.

The static methods valueOf() and values() are created at compile time and do not appear in source code. They do appear in Javadoc, though; for example, Dialog.ModalityType shows both methods.


Another solution if the text is not the same as the enumeration value:

public enum Blah {    A("text1"),    B("text2"),    C("text3"),    D("text4");    private String text;    Blah(String text) {        this.text = text;    }    public String getText() {        return this.text;    }    public static Blah fromString(String text) {        for (Blah b : Blah.values()) {            if (b.text.equalsIgnoreCase(text)) {                return b;            }        }        return null;    }}


Use the pattern from Joshua Bloch, Effective Java:

(simplified for brevity)

enum MyEnum {    ENUM_1("A"),    ENUM_2("B");    private String name;    private static final Map<String,MyEnum> ENUM_MAP;    MyEnum (String name) {        this.name = name;    }    public String getName() {        return this.name;    }    // Build an immutable map of String name to enum pairs.    // Any Map impl can be used.    static {        Map<String,MyEnum> map = new ConcurrentHashMap<String, MyEnum>();        for (MyEnum instance : MyEnum.values()) {            map.put(instance.getName().toLowerCase(),instance);        }        ENUM_MAP = Collections.unmodifiableMap(map);    }    public static MyEnum get (String name) {        return ENUM_MAP.get(name.toLowerCase());    }}

Also see:

Oracle Java Example using Enum and Map of instances

Execution order of of static blocks in an Enum type

How can I lookup a Java enum from its String value