java反射,获得Class是否为基本数据类型,是否其他类的父类。获得泛型。

来源:互联网 发布:hbuilder for mac下载 编辑:程序博客网 时间:2024/03/29 15:27

原文:http://blog.csdn.net/is_zhoufeng/article/details/7629931

Class c = ArrayList.class;

c.isPrimitive(); //判断c是否为基本数据类型

c.isAssignableFrom(List.class);  //判断c是否是List类的子类或父类

c.getGenericType(); //得到泛型类型


实例:通过反射得到List<T> 集合中的泛型类型

[java] view plaincopy
  1. package com.zf.target;  
  2.   
  3. import java.lang.reflect.Field;  
  4. import java.lang.reflect.ParameterizedType;  
  5. import java.lang.reflect.Type;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. class T{  
  10.     List<A>  a;  
  11.     List<B>  b;  
  12. //  List l ;  
  13.     Map<Integer, String> map ;  
  14.     int c;  
  15. }  
  16.   
  17. class A {}  
  18. class B{}  
  19.   
  20. public class Test9{  
  21.   
  22.     public static void main(String[] args) {  
  23.         Class tc = T.class;  
  24.         Field[] fields = tc.getDeclaredFields();  
  25.         for (Field f : fields) {  
  26.             Class fc = f.getType();  
  27.             if(fc.isPrimitive()){  
  28.                 System.out.println("基本数据类型: " + f.getName() + "  " + fc.getName());  
  29.             }else{  
  30.                 if(fc.isAssignableFrom(List.class)){ //判断是否为List  
  31.                     System.out.println("List类型:" + f.getName());  
  32.                     Type gt = f.getGenericType();   //得到泛型类型  
  33.                     ParameterizedType pt = (ParameterizedType)gt;  
  34.                     Class lll = (Class)pt.getActualTypeArguments()[0];  
  35.                     System.out.println("\t\t" + lll.getName());  
  36.                 }  
  37.             }  
  38.         }  
  39.     }  
  40.       
  41. }  

0 0