反射三(泛型)

泛型和反射:关键点是如何通过Class<T> 的到T对应的Clazz

(1)新建带泛型的父类例:Dao<T>

(2)  子类继承父类,并指定泛型的类型

public class PersonDao extends Dao<Person> {
    //具体代码省略
}

(3)  获取父类泛型参数具体Class

//获取子类Class
Class clazz = PersonDao.class;
//获取Dao子类带泛型参数的父类,即Dao<T>格式,T为具体类
Type type = clazz.getGenericSuperclass();
//获取具体泛型参数
if(type instanceof ParameterizedType){
ParameterizedType parameterizedType = (ParameterizedType) type;
Type[] args = parameterizedType.getActualTypeArguments();
if(args!=null && args.length>0){
Type arg = args[0];//获取泛型参数第一个参数,有时泛型的参数为多个
if(arg instanceof Class){
System.out.println("arg:"+arg);//得到父类泛型的Class
}
}
}

 

posted @ 2019-03-27 09:50  yxqing  阅读(136)  评论(0编辑  收藏  举报