黑马程序员技术交流社区

标题: 关于反射获取泛型参数的疑问 [打印本页]

作者: 任亚俊    时间: 2013-12-31 11:45
标题: 关于反射获取泛型参数的疑问
代码如下:
  1.         //任务6:利用反射获取方法的泛型参数、泛型异常、泛型返回值
  2.         public <T> void applyList(List<T> list) throws Exception{
  3.                 /**
  4.                  * 思路:
  5.                  * 1.获取方法
  6.                  * 2.获取方法的泛型参数
  7.                  */
  8.                 Method method = GenericTest.class.getMethod("applyList", List.class);
  9.                 //知识点:参数化的类型,ParameterizedType
  10.                 /*
  11.                  * 下面是错误的
  12.                  * ParameterizedType[] pt= (ParameterizedType[]) method.getGenericParameterTypes();
  13.                  */
  14.                 Type[] types=method.getGenericParameterTypes();
  15.                 //获取types中的元素,转成ParameterizedType这种类型
  16.                 ParameterizedType pt=(ParameterizedType) types[0];
  17.                 System.out.println(pt.getRawType()+";"+pt.getActualTypeArguments()[0]);
  18.         }
  19.         public void testApplyList() throws Exception{
  20.                 applyList(new ArrayList<Integer>());
  21.         }
复制代码

打印结果为:interface java.util.List;T
而我想要的结果是:java.util.ArrayList;Integer
怎样才能实现我想要的结果呢?求大神解答。

作者: 小骗子    时间: 2013-12-31 12:50
返回值并没有问题,因为你定义这个方法的时候 参数就是 List T
既然你是获取  参数 那就把参数做修改就ok了   
public <T> void applyList(List<T> list) throws Exception{
|
public <T> void applyList(ArrayList<Integer> list) throws Exception{
作者: 任亚俊    时间: 2013-12-31 17:32
小骗子 发表于 2013-12-31 12:50
返回值并没有问题,因为你定义这个方法的时候 参数就是 List T
既然你是获取  参数 那就把参数做修改就ok了 ...

我想获取传入的参数,而不是方法定义是的参数。即:我想获得实参而不是形参。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2