如何获得Java中字段的完整类类型


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用于使用通配符
  • 的泛型类型参数

相关内容

  • 没有找到相关文章

最新更新