我试图在运行时循环并打印给定枚举类的所有枚举值。但我似乎只能返回与值相关的常量。大多数解决方案都指向使用 getEnumConstants()、values() 或 valueOf(),但我无法让它们按预期工作。
我能找到的最接近的问题是通过反射获取enum的值 https://stackoverflow.com/questions/24260011/get-value-of-enum-by-reflection and 如何在java中获取所有枚举值 https://stackoverflow.com/questions/2269803/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)
}
和枚举:
@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
如果我了解这些自动生成的类正在做什么以及它们的用途,也许这会更容易?
终于明白了:
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");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)