【问题标题】:java enum receive values from string namejava枚举从字符串名称接收值
【发布时间】:2011-10-01 04:32:34
【问题描述】:

我有这样的枚举:

public enum Enum2 
{
    ONE,TWO,THREE;
}

我可以列出所有值,例如:

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

}

如果我只有 Enum 的字符串名称,是否可以列出值?

String enum_name="Enum2";

例如如果在某些逻辑中:

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

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

【问题讨论】:

    标签: java string list enums


    【解决方案1】:
    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
    }
    

    感谢 @Harry 帮助我解决这个问题。

    【讨论】:

    • 您需要将其转换为(Class&lt;? extends Enum&lt;?&gt;&gt;)
    • 运行输出:Exception in thread "main" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from Class&lt;capture#1-of ?&gt; to Class&lt;? extends Enum&lt;?&gt;&gt;
    • 我会使用 asSubclass 而不是狡猾的演员表。 (实际上,我会尽量避免让自己陷入一开始就需要反思的混乱之中。)
    • 你将如何使用 asSubClass?它接受一个 Class 实例作为参数,但我们不知道它是什么类。你能在这里发布一个片段来展示你的想法吗?
    【解决方案2】:

    你的问题不是很清楚,但这就是你可能想要做的

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

    您可以使用:Class.getEnumConstants()。更多信息请见this。

    【讨论】:

    • 那个 回答:) class 有一个特殊的枚举方法
    • +1 为您提供帮助 :) (但不是答案,对不起......但这是错误的)
    【解决方案3】:

    是的,有

    Enum2.EnumA.toString();
    

    【讨论】:

    • 他在编译时不知道 Enum2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多