class X {
private String y;
}
class T {
private List<X> w;
private void run() {
Field f = getClass().getDeclaredField("w");
Class t = f.getType();// t is "Class of interface java.util.List", but what I want is "Class of java.util.List<X>", how to achieve it
}
}
我试过getAnnotatedType
或其他东西,但没有发现任何有价值的
您可以尝试((ParameterizedType)f.getGenericType()).getActualTypeArguments()
以获得Type[]
数组,在您的情况下应该有1个元素:X.class
。请注意,这只适用于可以使用反射的情况(即不适用于局部变量),如果类型是边界,则需要以不同的方式处理。此外,您还需要检查getGenericType()
是否真的返回ParameterizedType
。
您可能想要查看的其他方法:
- 对于使用
getTypeParameters()
的类,这将返回一个空数组 - 方法返回类型使用
getGenericReturnType()
- 的方法和构造函数参数使用
getGenericParameterTypes()
,这将返回一个空数组的无参数方法
它们可能返回的类型/接口:
- 原始类型的实际类
ParameterizedType
用于通用字段、参数和返回类型TypeVariable
用于不带通配符的泛型类型参数WildcardType
用于使用通配符 的泛型类型参数