通過反射獲取變量泛型參數化的類型

package com.franky.generic;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @描述   通過反射獲取泛型的參數化類型
 * @作者 franky
 * @日期 2015-1-1 下午4:55:40
 * 
 */
public class GetGenericPrams {

	/**
	 * @param args
	 * @throws Exception 
	 * @throws NoSuchMethodException 
	 */
	public static void main(String[] args) throws NoSuchMethodException, Exception {
		//直接通過參數化泛型的變量是無法獲取泛型的參數化類型的,只能通過使用該變量的方法獲取
		ArrayList<Date> list = new ArrayList<Date>();
		Type[] types = GetGenericPrams.class.getMethod("genericMethod", ArrayList.class).getGenericParameterTypes();
		ParameterizedType pType  =  (ParameterizedType) types[0];
		//得到泛型的實際的參數化類型(列表,可能是多個泛型參數,如Map) class java.util.Date  
		Type actType = pType.getActualTypeArguments()[0];
		//得到方法參數列表的參數類型class java.util.ArrayList
		Type rawType = pType.getRawType();
		//如果類型爲某個類的內部成員,那麼返回所在的類的類型,否者返回 null
		Type ownerType = pType.getOwnerType();
		
		System.out.println(actType);//class java.util.Date  
		System.out.println(rawType);//class java.util.ArrayList
		System.out.println(ownerType);//null
		
		
	}
	
	public static void genericMethod(ArrayList<Date> list){
		
	}

}

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