我有一个包含多个子类的类:
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.i
和a1.class.getField("i").getInt(null);
都不起作用。
如何从对象中获取静态字段的值?
答案 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
只会返回公共字段。