TypeParameterResolver是泛型参数解析器,他的作用是解析出一个方法返回值或字段的真正类型。举个栗子:
定义俩类:
public class User<T> {
public List<T> getInfo() {
return null;
}
}
public class Student extends User<Number> {
}
请问调用Student类的getInfo方法输出的参数是啥?答案很easy 是 List<Number> TypeParameterResolver的作用就是解析出具体的类型是啥。
(1)下面对TypeParameterResolver的 resolveReturnType(Method method, Type srcType) 方法进行debug跟踪
method的是getInfo方法, srcType是调用该方法的类型 Student declaringClass是声明该方法的类 User returnType 是getInfo的返回值类型 List<T>
(2)type:List<T> 是参数化类型所以走到了 resolveParameterizedType
(3)typeArgs是List<T>的类型参数,只有一个T属于类型变量所以走到resolveTypeVar
(4)该示例中 srcType是Student ,declaringClass是User<Number> ,所以走了后续scanSuperTypes 方法判断是否能从父类中获取到泛型的边界,接下来分析scanSuperTypes方法
(5)superclass User<Number>属于参数化类型,最后声明getInfo的类和Student的父类相同,然后遍历parentAsClass的实际类型参数列表,找到了泛型 T typeVar对应的实际类型参数 Number并返回