----------- 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學習型技術博客、期待與您交流! ------------