从Class中获取静态字段的值

时间:2014-05-26 19:13:32

标签: 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;
}

现在我有一个ArrayList<Class<? extends A>>。如何从Class<? extends A>

获取静态字段的值

1 个答案:

答案 0 :(得分:4)

尝试使用反射

要遵循的步骤:

  • 首先使用变量名称
  • 检索类的声明字段
  • 检查返回字段的类型
  • 然后在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));
} 

修改

根据@Sotirios Delimanolis评论,您可以直接获取值,而无需检查字段类型和mathod Field#getX(),如下所示,但它将返回Object而不是原始int

Field f = list.get(0).getDeclaredField("i");
System.out.println(f.get(null));