Comment obtenir une valeur enum à partir d'une valeur chaîne en Java

Mots clés : javaenumsguavajava

meilleur 3 Réponses Comment obtenir une valeur enum à partir d'une valeur chaîne en Java

vote vote

91

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

84

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

77

/**  * A common method for all enums since they can't have another base class  * @param <T> Enum type  * @param c enum type. All enums must be all caps.  * @param string case insensitive  * @return corresponding enum, or null  */ public static <T extends Enum<T>> T getEnumFromString(Class<T> c, String string) {     if( c != null && string != null ) {         try {             return Enum.valueOf(c, string.trim().toUpperCase());         } catch(IllegalArgumentException ex) {         }     }     return null; } 
public static MyEnum fromString(String name) {     return getEnumFromString(MyEnum.class, name); } 

Questions similaires