vendredi 5 avril 2019

Does reflection reflect inheritance in Java?

In Java, I have a map where keys are Class<BaseType> objects. Each entry is keyed with an object of Class<ExtendedType> where ExtendedType extends BaseType. (There are many different ExtendedType classes, say ExtendedType1, ExtendedType2, etc., and just one BaseType.)

Map<Class<BaseType>, String> myMap;

I know it works on our project. However, I wonder whether this is syntactically correct?

If the syntax is fine, then the following should be fine as well (except for two lines - see comments in code):

class A {
}

class B extends A {
}

public static void main(String[] args) {

  // First inheritance:

  A a = new A();
  // Do something with a.

  B b = new B();
  // Do something with b.

  a = new B();
  // Should be fine since B extends A.

  b = new A();
  // Should NOT compile. A is a superclass of B.


  // Now reflection:

  Class<A> classA = A.class;
  // Do something with classA.

  Class<B> classB = B.class;
  // Do something with classB.

  classA = B.class;
  // Should be fine since Class<B> extends Class<A>. Does it really?

  classB = A.class;
  // Should NOT compile. Class<A> is a superclass of Class<B>. Is it?

}

What do you think? Thanks for any hints/comments.





Aucun commentaire:

Enregistrer un commentaire