使用Java反射的泛型参数实例化发现



考虑以下场景:

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

我怎么能通过Java中的反射知道在B中,T类型的变量被实例化为Integer

您可以使用

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];

简短但完整的示例:

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]);
    }
}

相关内容

  • 没有找到相关文章

最新更新