考虑以下情况:
class A<T> {}
class B extends A<Integer> {}
我如何通过Java反思知道在B
中,T
类型变量被实例化为Integer
?
答案 0 :(得分: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];
简短而完整的例子:
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]);
}
}