获得父类泛型的参数的实际类型
具体实现代码如下
public class BaseDao<T>
{
private Class<T> clazz; //这个就是我们最终要拿到的对象的class
public BaseDao()
{
//谁调用我,this指向谁,拿到调用者的Class信息类,因为这里是继承关系,this指向的是子类,我们要拿到父类 BaseDao<T> <T>泛型器里面的具体类型。getGenericSuperclass();
Type superType = this.getClass().getGenericSuperclass();
if( superType instanceof Class)
{
//为什么要转换为ParameterizedType呢?因为我们要的就是ParameterizedType里面的一个方法
ParameterizedType pt = (ParameterizedType)superType;
//getActualTypeArguments()返回表示此类型实际类型参数的Type 对象的数组 [0]就是这个数组中第一个了
Type trueType = pt.getActualTypeArguments()[0];
if( trueType instanceof Class)
{
this.clazz = (Class<T>) trueType;
}
}
}
}
getClass().getGenericSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。
然后将其转换ParameterizedType。
getActualTypeArguments()返回表示此类型实际类型参数的 Type 对象的数组。
[0]就是这个数组中第一个了。