Skip to main content

Generic Parameter instantiation discovery with Java Reflection



Consider the following scenario:







class A<T> {}

class B extends A<Integer> {}







How can I know through reflection in Java that in B , the T type variable was instantiated as an Integer ?


Comments

  1. You can use

    Type type = B.class.getGenericSuperclass();

    // TODO: check with instanceof first?
    ParameterizedType parameterized = (ParameterizedType) type;

    // TODO: Check that there *are* type arguments
    Type firstTypeArgument = parameterized.getActualTypeArguments()[0];


    Short but complete example:

    import java.lang.reflect.*;

    class A<T> {}
    class B extends A<Integer> {}

    public class Test {
    public static void main(String[] args) {
    Type type = B.class.getGenericSuperclass();
    ParameterizedType parameterized = (ParameterizedType) type;
    // Prints class java.lang.Integer
    System.out.println(parameterized.getActualTypeArguments()[0]);
    }
    }

    ReplyDelete

Post a Comment