実行時に、指定された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
おそらく、もし私がこれらの自動生成されたクラスが何をしているのか、そしてそれらが何のためにあるのかを理解するなら、これはもっと簡単でしょう?
それがあるまで、私は列挙型の名前を知ることができません実行時に構成ファイルから読み込みます。動的でなければなりません。このプログラムでは、50種類以上の異なるテキストボックスに50種類の列挙型のオプションにリンクされた列挙オプションを自動生成します。 – JavaBeast