黑馬程序員-通過反射獲取泛型參數類型

----------- android培訓java培訓、java學習型技術博客、期待與您交流! ------------

package com.itcast.test2;
import java.util.*;
import java.lang.reflect.*;
public class GenericTest {
	/**
	 * HashMap<String,Integer> hashMap = new HashMap<String,Integer>();
	 * 這個裏面我們是無法通過變量hashMap而得到HashMap中參數的類型,
	 * 因爲HashMap<String,Integer>在編譯後字節碼中去掉了類型
	 * 也就是說HashMap<String,Integer>和和HashMap<K,V>的字節碼是一樣的,
	 * 所以不能取得HashMap<String,Integer>中的參數類型,那我們可以通過把hashMap作爲
	 * 一個參數傳入一個方法中來獲得HashMap<String,Integer>中的參數類型,
	 * 因爲通過反射獲得的Method中有能夠獲得參數化的類型的方法
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Method useParameterMethod = Class.forName("com.itcast.test2.GenericTest").getMethod("useParameter",HashMap.class);
		Type[] gType = useParameterMethod.getGenericParameterTypes(); // 取得屬性的泛型類型
		ParameterizedType pType = (ParameterizedType)gType[0];
		System.out.println(pType.getRawType()); // 獲取原始類型
		Type[] tArgs = pType.getActualTypeArguments(); // 獲取參數類型
		for(Type t : tArgs) {
			System.out.println(t);
		}
		}
	// 此方法作用就是在主方法中通過反射調用該方法獲取參數類型
	public static void useParameter(HashMap<String,Integer> hashMap) {}
}

----------- android培訓java培訓、java學習型技術博客、期待與您交流! ------------


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