Anu*_*oob 3 java reflection static
abstract class A {
static int i = 5;
}
class B extends A {
static int i = 6;
}
class C extends A {
static int i = 7;
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个ArrayList<Class<? extends A>>. 如何从 中获取静态字段的值Class<? extends A>?
尝试反思
应遵循的步骤:
示例代码:
ArrayList<Class<? extends A>> list = new ArrayList<Class<? extends A>>();
list.add(B.class);
list.add(A.class);
// get the value of first class stored in array
Field f = list.get(0).getDeclaredField("i");
Class<?> t = f.getType();
if (t == int.class) {
System.out.println(f.getInt(null));
}
Run Code Online (Sandbox Code Playgroud)
根据@Sotirios Delimanolis 评论,您可以直接获取值,而无需检查字段类型和方法,Field#getX()如下所示,但它将返回Object而不是原始值int。
Field f = list.get(0).getDeclaredField("i");
System.out.println(f.get(null));
Run Code Online (Sandbox Code Playgroud)