使用反射获取当前new的对象的 带泛型的父类的 类型

来源:互联网 发布:大连淘宝美工 编辑:程序博客网 时间:2024/05/16 07:12
1 public class Person<T> { 2  3 } 4  5 import java.lang.reflect.ParameterizedType; 6 import java.lang.reflect.Type; 7  8 public class Student extends Person<Student> { 9 public static void main(String[] args) {10 Student st=new Student();11 Class clazz=st.getClass();12 //getSuperclass()获得该类的父类13 System.out.println(clazz.getSuperclass());14 //getGenericSuperclass()获得带有泛型的父类15 //Type是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。16 Type type=clazz.getGenericSuperclass();17 System.out.println(type);18 //ParameterizedType参数化类型,即泛型19 ParameterizedType p=(ParameterizedType)type;20 //getActualTypeArguments获取参数化类型的数组,泛型可能有多个21 Class c=(Class) p.getActualTypeArguments()[0];22 System.out.println(c);23 }24 }25 26 打印结果:27 28 class com.test.Person29 com.test.Person<com.test.Student>30 class com.test.Student
public abstract class DaoSupportImpl<T> implements DaoSupport<T> {@Resourceprivate SessionFactory sessionFactory;private Class<T> clazz;public DaoSupportImpl() {// 使用反射技术得到T的真实类型ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 获取当前new的对象的 带泛型的父类类型this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; // 获取第一个类型参数的真实类型System.out.println("clazz ---> " + clazz);}
                                             
0 0
原创粉丝点击