public static void main(String[] args) throws SecurityException, NoSuchMethodException {
// TODO Auto-generated method stub
// test1();
Vector<Date> v1=new Vector<Date>();
Method applyMethod=MapGenericDemo.class.getMethod("applyVector", v1.getClass());
Type [] types=applyMethod.getGenericParameterTypes();
ParameterizedType pType=(ParameterizedType) types[0];
System.out.println(pType.getRawType());//打印出来的是原始的类型
System.out.println(pType.public static void main(String[] args) throws SecurityException, NoSuchMethodException {
// TODO Auto-generated method stub
// test1();
Vector<Date> v1=new Vector<Date>();
Method applyMethod=MapGenericDemo.class.getMethod("applyVector", v1.getClass());
Type [] types=applyMethod.getGenericParameterTypes();
ParameterizedType pType=(ParameterizedType) types[0];
System.out.println(pType.getRawType());//打印出来的是原始的类型
System.out.println(pType.getActualTypeArguments()[0]);//打印出来的是实际参数类型
}
public static void applyVector(Vector<Date> v1) {
}
[0]);//打印出来的是实际参数类型
}
public static void applyVector(Vector<Date> v1) {
}
这个代码是通过反射来获取了泛型的实际参数的类型,但是大家都知道,在java中泛型就仅仅只是用在编译时期的一个方式,在运行时期就直接把泛型给擦除了,我理解的就是,即使我能够在定义一个方法,这个方法传入的参数有这个泛型,它也是用作在编译时期,增加安全性,在事后编译成class文件之后就不存在了,那我们为什么还能拿到通过getActualTypeArguments()拿到参数类型呢,没懂……这些代码是死记下来的,其实还没有明白代码的意思。
|