0

I have a class with multiple subclasses:

class A {

    static int i = 5;
}

class B extends A{

    static int i = 6;
}

class C extends A {

    static int i = 7;
}

I'm trying to write a comparator that takes two A's and compares them based on their values of i. I'm stuck at:

public int compare(A a1, A a2) {

}

Neither a1.i nor a1.class.getField("i").getInt(null); work.

How can I get the value of the static field from the object?

Anubian Noob
  • 13,426
  • 6
  • 53
  • 75

1 Answers1

2
a1.i

Because a1 is declared a A, it is equivalent to A.i. The compiler should tell you about that with a warning. Most IDE will do that to and give a little message about what to do about it.

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

Can't work because class is static.

You can use

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

getClass is an instance method to get the class of an object. getDeclaredField will return all fields, while getField will only return the public ones.

njzk2
  • 38,969
  • 7
  • 69
  • 107