转载自 https://blog.youkuaiyun.com/qq_39403545/article/details/80261785
public class RealType<T>{
private Class<T> clazz;
// 使用反射技术得到T的真实类型
public Class getRealType(){
// 获取当前new的对象的泛型的父类类型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
// 获取第一个类型参数的真实类型
this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
return clazz;
}
}
用法简单举例
public class BaseDao<T>{
private Class<T> clazz;
// 使用反射技术得到T的真实类型
public Class getRealType(){
// 获取当前new的对象的泛型的父类类型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
// 获取第一个类型参数的真实类型
this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
return clazz;
}
}
class ClassB extends BaseDao<String>{
public static void main(String[] args) {
ClassB classB = new ClassB();
Class realType = classB.getRealType();
System.out.println(realType.getName());
}
}