黑马程序员技术交流社区

标题: 基础加强2--通过反射获取泛型的实际类型参数视频疑问 [打印本页]

作者: 樊其杰    时间: 2013-5-21 21:13
标题: 基础加强2--通过反射获取泛型的实际类型参数视频疑问
本帖最后由 樊其杰 于 2013-5-23 07:50 编辑
  1. public class GenericTest3 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) throws Exception{
  6.                 // TODO Auto-generated method stub
  7.                 Method applyMethod=GenericTest3.class.getMethod("applyVector", Vector.class);
  8.                 Type[] types=applyMethod.getGenericParameterTypes();
  9.                 ParameterizedType  pType=(ParameterizedType)types[0];
  10.                 System.out.println(pType);        
  11.         }
  12.         public static void applyVector(Vector<Date> v){
  13.                
  14.         }

  15. }
复制代码
以上代码中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