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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© suichuan689 中级黑马   /  2015-8-27 10:22  /  159 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package junereflect624;

  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.ParameterizedType;
  4. import java.lang.reflect.Type;
  5. import java.util.HashMap;
  6. import java.util.Map;

  7. public class GetGenericTypeDemo14 {
  8.         Map<String,Integer> map = new HashMap<String,Integer>();
  9.        
  10.         public static void main(String[] args) throws Exception {
  11.                 Class c = GetGenericTypeDemo14.class;
  12.                 Field f = c.getDeclaredField("map");
  13.                 System.out.println(f);
  14.                 System.out.println(f.getName());//map
  15.                
  16.                 // Class<?> getType()  返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型。
  17.                 Class cl = f.getType();
  18.                 System.out.println("获得其类型:"+cl);
  19. //获得其类型:interface java.util.Map
  20.                
  21.                 /**
  22.                  *  Type getGenericType() 返回一个 Type 对象,它表示此 Field 对象所表示字段的声明类型。
  23.                  *  Type是Class的接口;
  24.                  */
  25.                 Type t = f.getGenericType();//包含泛型的类型
  26.                 System.out.println(t);
  27. //java.util.Map<java.lang.String, java.lang.Integer>
  28.                

  29.                 /**
  30.                  * Type这个类里面没有任何的方法,所以需要调用子类的方法,那么大的类型转到小的类型,需要强转!
  31.                  */
  32.                 ParameterizedType pt = (ParameterizedType)t;//强转到其子类
  33.                 /**
  34.                  *  Type[] getActualTypeArguments()
  35.                                   返回表示此类型实际类型参数的 Type对象的数组。
  36.                          Type getOwnerType()
  37.                                   返回 Type 对象,表示此类型是其成员之一的类型。
  38.                          Type getRawType()
  39.                                   返回 Type 对象,表示声明此类型的类或接口。
  40.                  */
  41.                
  42.                 t = pt.getRawType();//类型的类或接口
  43.                 System.out.println(t);
  44.                
  45.                 Type[] ts = pt.getActualTypeArgument();
  46.                 for (Type type : ts) {
  47.                         System.out.println(type);
  48.                         /**
  49.                          *  class java.lang.String
  50.                             class java.lang.Integer
  51.                          */
  52.                 }
  53.         }
  54. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马