2017-12-15 24 views
0

実行時に、指定されたEnumクラスのすべてのENUM値をループスルーして印刷しようとしています。しかし、私は値に関連付けられた定数を返すように見えるだけです。ほとんどのソリューションでは、getEnumConstants()、values()、またはvalueOf()を使用していますが、希望通りに動作させることができませんでした。リフレクションでenum値を取得する

最も近い質問はGet value of enum by reflection how-to-get-all-enum-values-in-javaですが、解決策が私の要件に合わないほど明らかに異なっています。以下、私が試みたコードと自動生成され、不変であるENUMクラスがある:

Class cls = Class.forName("TestEnum"); 
for (Object obj : cls.getEnumConstants()) 
{ 
    System.out.println(obj.toString()); //prints TEST___A (not TEST_1) 
    System.out.println(Enum.valueOf(cls, obj.toString())); //prints TEST___A (not TEST_1) 
} 

とENUM:

@XmlType(name = "TestEnum") 
@XmlEnum 
public enum TestEnum { 

    @XmlEnumValue("TEST_1") 
    TEST___A("TEST_1"), 
    @XmlEnumValue("TEST_2") 
    TEST___B("TEST_2"); 
    private final String value; 

    TestEnum(String v) { 
     value = v; 
    } 

    public String value() { 
     return value; 
    } 

    public static TestEnum fromValue(String v) { 
     for (TestEnum c: TestEnum.values()) { 
      if (c.value.equals(v)) { 
       return c; 
      } 
     } 
     throw new IllegalArgumentException(v); 
    } 

所望の出力:

TEST_1 
TEST_2 

実際の出力:

TEST___A 
TEST___B 

おそらく、もし私がこれらの自動生成されたクラスが何をしているのか、そしてそれらが何のためにあるのかを理解するなら、これはもっと簡単でしょう?

答えて

0

は、最後にそれを得た:

Class cls = Class.forName("TestEnum"); 
    for (Object obj : cls.getEnumConstants()) 
    { 
     try 
     { 
      Method m = cls.getMethod("value", null); 
      System.out.println(m.invoke(obj, null)); 
     } 
     catch(NoSuchMethodException | IllegalAccessException | 
       InvocationTargetException ex){System.out.println("could not find enum");} 
0

はおそらく、このような何か(必要な反射なし):

enum MyEnum { 
    TEST____1("TEST_1"), 
    TEST____2("TEST_2"); 

    final String value; 

    MyEnum(String value) { 
     this.value = value; 
    } 

    public String getValue() { 
     return value; 
    } 
} 

public void test(String[] args) { 
    for (MyEnum e : MyEnum.class.getEnumConstants()) { 
     System.out.println(e.toString() + " - " + e.getValue()); 
    } 
} 

あるいは

enum MyEnum { 
    TEST____1("TEST_1"), 
    TEST____2("TEST_2"); 

    final String value; 

    MyEnum(String value) { 
     this.value = value; 
    } 

} 

public void test(String[] args) { 
    for (MyEnum e : MyEnum.class.getEnumConstants()) { 
     System.out.println(e.toString() + " - " + e.value); 
    } 
} 
+0

それがあるまで、私は列挙型の名前を知ることができません実行時に構成ファイルから読み込みます。動的でなければなりません。このプログラムでは、50種類以上の異なるテキストボックスに50種類の列挙型のオプションにリンクされた列挙オプションを自動生成します。 – JavaBeast

関連する問題