使用Java Reflection进行通用参数实例化发现

dev*_*ium 2 java reflection

请考虑以下情形:

class A<T> {}
class B extends A<Integer> {}
Run Code Online (Sandbox Code Playgroud)

我如何通过Java中的反射知道B,在T类型变量中实例化为Integer

Jon*_*eet 6

您可以使用

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];
Run Code Online (Sandbox Code Playgroud)

简短而完整的例子:

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]);
    }
}
Run Code Online (Sandbox Code Playgroud)