当您在类字段中使用泛型声明对象时,此类中的字段反射对象会保留声明的泛型类型。
static class ClassA {
public List<String> field = new ArrayList<String>();
}
public static void main(String[] args) throws Exception {
Field field = ClassA.class.getField("field");
Class<?> genericType = getGenericType(field);
System.out.println(genericType);
}
private static Class<?> getGenericType(Field field) {
final Type type0 = field.getGenericType();
if (type0 instanceof ParameterizedType) {
final Type type = ((ParameterizedType) type0).getActualTypeArguments()[0];
if (type instanceof Class<?>) {
return (Class<?>) type;
}
// miss code for method arguments
}
return Object.class;
}
代码打印class java.lang.String
并且在您的情况下可能很有用,但基本上原始 Class 对象不携带泛型信息 - 因为泛型信息仅用于编译时而不是运行时。