得到泛型的实际类型,使用对象或者字段是不能得到的,要使用方法参数的形式,也就是说通过将带泛型的集合等类型传入一个方法,再通过得到该方法的参数化类型,从而拿到泛型的实际类型
自己写的例子:
package cn.itheima.Demo;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class getreflectGenri {
/**
*
* 想要得到泛型的具体类型,
* 必须使用反射出方法参数里的泛型才能得到泛型的具体类型,
* 因为如果你使用字段,在进行编译的时候会进行泛型擦除,从而得不到想要的类型
* 泛型擦除后,所有的类型都是一样
* 如果我们想要得到某个集合中的泛型,可以构造一个方法,将带泛型的集合放入其中,通过得到
* 该方法的参数类型,就可以得到具体的泛型类型,
* @param args
* @throws NoSuchMethodException
* @throws SecurityException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//List<Integer> list = new ArrayList<Integer>();
getreflectGenri gfg = new getreflectGenri();
Method method = gfg.getClass().getMethod("apply", List.class);
//得到泛型参数化类型,返回一个数组
Type[] types = method.getGenericParameterTypes();
//由于这里只是有一个参数,所以得到该参数,类型为参数化类型ParameterizedType
ParameterizedType pt = (ParameterizedType) types[0];
System.out.println(pt.getRawType());
//得到具体泛型类型
System.out.println(pt.getActualTypeArguments()[0]);
}
public static void apply(List<Integer> list){
}
}