需求
通常在泛型参数编程中会使用如下定义:
interface Provider<T> {
Class<T> provideClass();
}
class Provider<T>{
Class<T> provideClass();
}
一般我们都想默认实现provideClass方法
思路
java已经提供了ParameterizedType类型来描述带泛型参数的类,通过反射获取实现或继承此接口的子类信息,可以获取到此类型,即可得到泛型参数类型
目前网上大部分文章也都是基于此思路实现。但如果有下列编写场景之一,获取过程将比较复杂,且不灵活通用
- 多层级继承
- 多接口实现
- 多个泛型参数 Provider<A,B,C>的以上混合情形
例如:基于类
public class ClassTDemo {
class Provider<T> {
}
class TC {
}
class C extends Provider<TC> {
}
private Class<?> resolveSuperClassParameterizedType(Class<?> source) {
ParameterizedType parameterizedType = (ParameterizedType) source.getGenericSuperclass();
Type[] typeArguments = parameterizedType.getActualTypeArguments();
return