我正在尝试通过反射(name
类的Enum
字段)访问枚举的名称,但我得到NoSuchFieldException
。
请参阅下面的一个简单示例:程序为Integer打印5
但为枚举抛出异常。
是否有一种优雅的方法可以让inspect
方法用于枚举?
public class Test {
static enum A {
A;
}
public static void main(String[] args) throws Exception {
Integer i = 5;
System.out.println(inspect(i, "value")); // prints 5, good
A a = A.A;
System.out.println(inspect(a, "name")); // Exception :-(
}
private static Object inspect(Object o, String fieldName) throws Exception {
Field f = o.getClass().getDeclaredField(fieldName);
f.setAccessible(true);
return f.get(o);
}
}
答案 0 :(得分:2)
getField
或getDeclaredField
方法仅返回在被调用类中声明的字段的正结果。他们不会搜索超类中声明的字段。因此,要获得名称字段的引用,您需要更深入。获取超类引用(在您的情况下将为Enum
类)并在那里搜索名称字段。
o.getClass().getSuperclass().getDeclaredField(fieldName);