黑马程序员技术交流社区
标题:
基础加强2--通过反射获取泛型的实际类型参数视频疑问
[打印本页]
作者:
樊其杰
时间:
2013-5-21 21:13
标题:
基础加强2--通过反射获取泛型的实际类型参数视频疑问
本帖最后由 樊其杰 于 2013-5-23 07:50 编辑
public class GenericTest3 {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Method applyMethod=GenericTest3.class.getMethod("applyVector", Vector.class);
Type[] types=applyMethod.getGenericParameterTypes();
ParameterizedType pType=(ParameterizedType)types[0];
System.out.println(pType);
}
public static void applyVector(Vector<Date> v){
}
}
复制代码
以上代码中types数组中的元素为什么是ParameterizedType?为什么这里要用ParameterizedType?
作者:
breeze
时间:
2013-5-22 07:32
ParameterizedType这个类是参数化类型的意思, 它提供了getActualTypeArguments()方法获得泛型定义的参数类型, 就是获得<>中的类型
Method applyMethod=GenericTest3.class.getMethod("applyVector", Vector.class); //这句代码是得到了GenericTest3类中的方法, 这个方法接收一个vector集合参数
Type[] types=applyMethod.getGenericParameterTypes(); //这句代码是得到了泛型的参数类型集合, 因为可能传入的参数可能是多个
ParameterizedType pType=(ParameterizedType)types[0]; //这里是获得集合第一个元素类型的集合, 打印结果是java.util.Vector<java.util.Date>
你应该加上下面两句, 分别能得到你的原本的参数类型, 就是Vector, 你的泛型参数类型, 就是Date
System.out.println(pt.getRawType()); //ParameterizedType 中的getRawType() 可以获得实际的参数类型
System.out.println(pt.getActualTypeArguments()[0]); // getActualArguments()可以获得泛型的参数类型
作者:
fjl_fight
时间:
2013-5-22 22:35
存在泛型类型就一定是ParameterizedType的子类,即是定义的泛型类都默认实现了ParameterizedType接口
作者:
曹睿翔
时间:
2013-5-22 23:02
问题解决就再次编辑更改问题类型,没有解决继续追问
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2