从类中获取静态字段的值

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>

Bra*_*raj 7

尝试反思

应遵循的步骤:

  • 首先使用变量名检索类的声明字段
  • 检查返回字段的类型
  • 然后调用Field对应的方法获取字段值

示例代码:

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)