2011-07-08 124 views
3

收到值我有枚举,如:java的枚举从字符串名称

public enum Enum2 
{ 
    ONE,TWO,THREE; 
} 

我可以列出像所有的值:

public static void main(String... args) 
{ 
    for (Enum2 e : Enum2.values()) 
    { 
     System.out.println(e); 
    } 

} 

是否有可能列表中的值,如果我有枚举的唯一字符串名称?

String enum_name="Enum2"; 

例如,如果像一些逻辑:

if (a>b) 
{ 
enum_name="EnumA"; 
} 
else 
{ 
enum_name="EnumB"; 
} 

后,我收到枚举的字符串名称 - 我可以列出所有值。

回答

2
Class<?> enumClazz = Class.forName("com.mycompany.Enum2"); 
for (Enum<?> e : ((Class<? extends Enum<?>>)enumClazz).getEnumConstants()) { 
    System.out.println(e.name()); // The variable "e" would be Enum2.ONE, etc 
} 

谢谢@哈里帮助我解决这个问题。

+0

您需要将它转换为'(Class <?extends Enum >)' –

+0

运行的输出:'线程中的异常“main”java.lang.Error:未解决的编译问题: \t类型不匹配:无法从Class 转换为Class <?扩展Enum >' –

+0

现在它是正确的。 –

-1

是,与

Enum2.EnumA.toString(); 
+0

他不知道Enum2在编译时 – user102008

1

你的问题是没有多少明确的是但是这是你可能想要做

Class<?> cls = Class.forName("EnumName"); 
if (cls.isEnum()) { 
    Field[] flds = cls.getDeclaredFields(); 
    //-- your logic for fields. 
} 

您可以用什么:Class.getEnumConstants()。欲了解更多信息请登录this

+0

不太...看到我的回答 – Bohemian

+0

*那个*回答:)'class'有一个特殊的枚举方法 – Bohemian

+0

+1对于你的帮助:)(但不是答案,对不起...但它是错误的) – Bohemian