ParameterizedType的基本用法

/**
 * ParameterizedType
 *     1:getActualTypeArguments  得到帶<> 參數的類型  比如java.lang.String
 *     2:java.util.List 得到帶參數全限定名稱
 *     3:如果屬於自己的對象中對象且帶有<>,返回自己的全限定名稱
 */
public class ParameterizedBean {
    List<String> list1;
    List list2;
    Map<String, Long> map1;
    Map map2;
    Map.Entry<Long, Short> map3;

    /**
     * Type[] getActualTypeArguments()
     */
    public static void main(String[] args) {
        System.out.println("A===================================A");
       methodA();
        System.out.println("B===================================B");
       methodB();
        System.out.println("C===================================C");
       methodC();
    }

    private static void methodC() {
        Field[] fields =  ParameterizedBean.class.getDeclaredFields();
        for(Field f:fields){
            if(f.getGenericType() instanceof ParameterizedType){
                ParameterizedType pType = (ParameterizedType) f.getGenericType();
                System.out.println("變量:"+f.getName());
                Type t = pType.getOwnerType();
                if(t == null){
                    System.out.println("OwnerType:Null     ");
                }else{       System.out.println("OwnerType:"+t.getTypeName());
                }
            }
        }
    }

    private static void methodB() {
        Field[] fields =  ParameterizedBean.class.getDeclaredFields();
        for(Field f:fields){
            if(f.getGenericType() instanceof ParameterizedType){
                ParameterizedType pType = (ParameterizedType) f.getGenericType();
                System.out.println("變量:"+f.getName());
                System.out.println("RawType:"+pType.getRawType().getTypeName());
            }
        }
    }

    private static void methodA() {
        Field[] fields = ParameterizedBean.class.getDeclaredFields();
        for (Field f : fields) {
            if (f.getGenericType() instanceof ParameterizedType) {
                ParameterizedType pType = (ParameterizedType) f.getGenericType();
                System.out.println("變量:" + pType.getTypeName() + "     ");
                Type[] types = pType.getActualTypeArguments();
                for (Type t : types) {
                    System.out.println("類型:" + t.getTypeName());
                }
            }
        }
    }
}

運行結果

A===================================A
變量:java.util.List<java.lang.String>     
類型:java.lang.String
變量:java.util.Map<java.lang.String, java.lang.Long>     
類型:java.lang.String
類型:java.lang.Long
變量:java.util.Map.java.util.Map$Entry<java.lang.Long, java.lang.Short>     
類型:java.lang.Long
類型:java.lang.Short
B===================================B
變量:list1
RawType:java.util.List
變量:map1
RawType:java.util.Map
變量:map3
RawType:java.util.Map$Entry
C===================================C
變量:list1
OwnerType:Null     
變量:map1
OwnerType:Null     
變量:map3
OwnerType:java.util.Map

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章