A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 樊其杰 于 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?

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

3 个回复

正序浏览
问题解决就再次编辑更改问题类型,没有解决继续追问
回复 使用道具 举报
存在泛型类型就一定是ParameterizedType的子类,即是定义的泛型类都默认实现了ParameterizedType接口
回复 使用道具 举报
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()可以获得泛型的参数类型

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马