一、泛型概述
泛型擦写
处理类型
(Type)
相关方法Class<?> resolveReturnType(Method method, Class<?> clazz)
Class<?> resolveTypeArgument(Class<?> clazz, Class<?> genericIfc)
- 处理泛型参数类型
(ParameterizedType)
相关方法Class<?> resolveReturnTypeArgument(Method method, Class<?> genericIfc)
Class<?> resolveTypeArgument(Class<?> clazz, Class<?> genericIfc)
Class<?>[] resolveTypeArguments(Class<?> clazz, Class<?> genericIfc)
- 处理泛型类型变量
(TypeVariable)
相关方法Map<TypeVariable, Type> getTypeVariableMap(Class<?> clazz)
```java // #泛型参数 resolveTypeArgument public interface MyInterfaceType{} public class MySimpleInterfaceType implements MyInterfaceType {}
@Test void simpleInterfaceType() { assertThat(resolveTypeArgument(MySimpleInterfaceType.class, MyInterfaceType.class)).isEqualTo(String.class); }
// #泛型返回参数 resolveReturnTypeArgument
public static class MyTypeWithMethods
public MyInterfaceType<Integer> integer() {
return null;
}
} assertThat(resolveReturnTypeArgument(findMethod(MyTypeWithMethods.class, “integer”), MyInterfaceType.class)).isEqualTo(Integer.class);
// #resolveType
public static class MyTypeWithMethods
三、MethodParameter
封装了方法参数规范的Helper
类,即方法或构造函数,以及参数索引和已声明泛型类型的嵌套类型索引。 用作传递的规范对象。
从4.2
版本开始,提供了一个org.springframework.core.annotation.SynthesizingMethodParameter
子类,该子类用于合成具有属性别名的注解。 适用于Web
和消息终结点(message endpoint)
处理。
3.1 元信息
- 关联的方法:
Method
- 关联的构造器:
Constructor
- 构造器或方法参数索引:
parameterIndex
- 构造器或方法参数类型:
parameterType
- 构造器或方法参数泛型类型:
genericParameterType
- 构造器或方法参数类型名称:
parameterName
- 所在的类:
containingClass
-
3.2 设计
表达参数类型(包含方法、构造器)
-
四、Spring4.0 泛型优化实现
ResolveableType
ResolveableType
是作为GenericTypeResolver
和GenericCollectionTypeResolver
的替代者,用心简化操作以及屏蔽复杂API
。
可以将其API
分类如下: 工厂方法:
for*
- 转换方法:
as*
-
4.1 示例
4.2 局限性
无法处理泛型擦写(JDK限制)
-
五、扩展
5.1 Java5 Type类型的派生类或接口
java.lang.Class
- java.lang.reflect.GenericArrayType
- java.lang.reflect.ParameterizedType
- java.lang.reflect.TypeVariable
java.lang.reflect.WildcardType
5.2 ResolvableType设计优势
简化 Java5 Type API开发,屏蔽复杂 API运用,如 ParameterizedType
- 不变性设计(Immutability)
- Fluent API 设计 (Builder模式),链式(流式)编程