从实例获取静态字段

时间:2014-05-26 21:58:45

标签: java inheritance static

我有一个包含多个子类的类:

class A {

    static int i = 5;
}

class B extends A{

    static int i = 6;
}

class C extends A {

    static int i = 7;
}

我尝试编写一个比较器,它需要两个A并根据i的值对它们进行比较。我坚持:

public int compare(A a1, A a2) {

}

a1.ia1.class.getField("i").getInt(null);都不起作用。

如何从对象中获取静态字段的值?

1 个答案:

答案 0 :(得分:2)

a1.i

因为a1被声明为A,所以它等同于A.i。编译器应该通过警告告诉你。大多数IDE都会这样做,并提供一些关于如何处理它的消息。

a1.class.getField("i").getInt(null);

无法正常工作,因为class是静态的。

您可以使用

a1.getClass().getDeclaredField("i").getInt(null);

getClass是获取对象类的实例方法。 getDeclaredField将返回所有字段,而getField只会返回公共字段。