java 反射 , 判斷Class是否是某個類的子類或父類 . – JAVA編程語言程序開發技術文章

Class c = ArrayList.class;
c.isPrimitive(); //判斷c是否為基本數據類型
c.isAssignableFrom(List.class);  //判斷c是否是List類的子類或父類
c.getGenericType(); //得到泛型類型

實例:通過反射得到List<T> 集合中的泛型類型
[java] 
package com.zf.target; 
  
import java.lang.reflect.Field; 
import java.lang.reflect.ParameterizedType; 
import java.lang.reflect.Type; 
import java.util.List; 
import java.util.Map; 
  
class T{ 
    List<A>  a; 
    List<B>  b; 
//  List l ; 
    Map<Integer, String> map ; 
    int c; 

  
class A {} 
class B{} 
  
public class Test9{ 
  
    public static void main(String[] args) { 
        Class tc = T.class; 
        Field[] fields = tc.getDeclaredFields(); 
        for (Field f : fields) { 
            Class fc = f.getType(); 
            if(fc.isPrimitive()){ 
                System.out.println("基本數據類型: " + f.getName() + "  " + fc.getName()); 
            }else{ 
                if(fc.isAssignableFrom(List.class)){ //判斷是否為List 
                    System.out.println("List類型:" + f.getName()); 
                    Type gt = f.getGenericType();   //得到泛型類型 
                    ParameterizedType pt = (ParameterizedType)gt; 
                    Class lll = (Class)pt.getActualTypeArguments()[0]; 
                    System.out.println("\t\t" + lll.getName()); 
                } 
            } 
        } 
    } 
     

發佈留言