2011-09-20 64 views
0

我需要设置一个枚举值,像这样:如果你有一个字符串和枚举没有getSomething(String str)方法,你如何查找枚举值?

this.myEnum = ThirdPartyEnum.ABC; 

但我提供给我的价值不枚举形式。

这只是一个原始字符串:

"ABC" 

ThirdPartyEnum没有一个ThirdPartyEnum.lookupEnumForString()

如何翻译字符串

"ABC" 

到:

ThirdPartyEnum.ABC 
+0

看起来像一个重复[我怎样才能从查找的字符串值的Java枚举?](http://stackoverflow.com/q/1080904/851811) –

+0

是的,它的ID DUP ...我的意思在几次之前没有问过这个机会是什么 –

回答

2

尝试Enum.valueOf()

Enum.valueOf()

或者

ThirdPartyEnum.valueOf("ABC"); 

valueOf是为所有Java Enum类定义的默认方法。

如果您正在进行函数式编程,Guava提供了一种创建函数来获取valueOf的方法。

Enums.valueOfFunction

+0

+1:不知道。很有用! – Heisenbug

4

你可以做

ThirdPartyEnum.valueOf("ABC"); 

我想补充,并与你提到的,如果你想查询其属性中的一个枚举值lookupEnumForString()方法,你可以使用values() 。请注意,values()是公开的,您也可以在没有控制权的第三方枚举中使用它。

public enum MyEnum { 

    VAL1("1"), VAL2("2"); 

    String attr; 
    private MyEnum(String attr){ 
     this.attr = attr; 
    } 
    public String getAttr() { return attr; } 

    public static MyEnum getByAttr(String searchAttr) { 
     for(MyEnum t : values()){ 
      if(searchAttr.equals(t.getAttr())){ 
       return t; 
      } 
     } 
    } 
}