通过变量是无法i获取该变量的泛型类型的,当把变量作为一个方法的形参,可通过方法获得该参数变量的泛型类型,代码如下: 
- public class GenericTest {
 
  
-         /**通过反射获得泛型的实际类型参数
 
 -          *
 
 -          */
 
 -         public static void main(String[] args) {
 
 -                 try {
 
 -                         //通过方法反射获得该方法的形参的变量类型字节码
 
 -                         Method applymethod=GenericTest.class.getMethod("applyMap", Map.class);
 
 -                         //用Type【】数组接受方法传入的形参的个数
 
 -                         Type[] types=applymethod.getGenericParameterTypes();
 
 -                         //取出Type[]数组中的每个形参类型并打印出来
 
 -                          ParameterizedType pType=(ParameterizedType)types[0];
 
 -                          System.out.println("该参数变量的实际类型:  "+pType.getRawType());
 
 -                          System.out.println("Map泛型参数的实际类型:"+pType.getActualTypeArguments()[0].toString()+'\t'+pType.getActualTypeArguments()[1].toString());
 
 -                          
 
 -                 } catch (SecurityException e) {
 
 -                         // TODO Auto-generated catch block
 
 -                         e.printStackTrace();
 
 -                 } catch (NoSuchMethodException e) {
 
 -                         // TODO Auto-generated catch block
 
 -                         e.printStackTrace();
 
 -                 }
 
  
-         }
 
 -         //通过变量p是没法知道这个集合中的泛型类型的,只有当把这个变量作为方法的参数时,才可以通过方法获得该参数的泛型类型。
 
 -         public static void applyMap(Map<String,Integer> p)
 
 -         {
 
 -                 
 
 -         }
 
 - }
 
  复制代码 
 
运行结果: 
该参数变量的实际类型:  interface java.util.Map 
Map泛型参数的实际类型:class java.lang.String        class java.lang.Integer 
希望对你有帮助。 |