如何使用反射找到传递给超类的类型参数值?
例如,给定Bar.class
,如何找到它将Integer.class
传递给Foo
的类型参数T
?
public class Foo<T> {
}
public class Bar extends Foo<Integer> {
}
谢谢!
答案 0 :(得分:2)
public class Bar extends Foo<Integer> {
public Class getTypeClass {
ParameterizedType parameterizedType =
(ParameterizedType) getClass().getGenericSuperClass();
return (Class) parameterizedtype.getActualTypeArguments()[0];
}
}
上面给出的应该适用于大多数实际情况,但不能保证,因为类型擦除,没有办法直接这样做。
答案 1 :(得分:1)
你可以尝试
ParameterizedType type = (ParameterizedType) Bar.class.getGenericSuperclass();
System.out.println(type.getRawType()); // prints; class Foo
Type[] actualTypeArguments = type.getActualTypeArguments();
System.out.println(actualTypeArguments[0]); // prints; class java.lang.Integer
这只能起作用,因为Bar是一个扩展特定Foo的类。如果您声明了如下所示的变量,则无法在运行时确定intFoo的参数类型。
Foo<Integer> intFoo = new Foo<Integer>();