例如:Vector<Data> v = new Vector<Data>(); 這個裏面我們是無法通過變量v而得到Vector中參數的類型,因爲Vector<Data>在編譯後字節碼中去掉了類型,也就是說Vector<Data>和和Vector<T>的字節碼是一樣的,所以不能取得Vector中的參數類型,那我們可以通過把v作爲一個參數傳入一個方法中來獲得Vector中的參數類型,因爲通過反射獲得的Method中有能夠獲得參數化的類型的方法,如下:
public class GenericTest {
public static void main(String[] args) throws Exception {
Method method = GenericTest.class.getMethod("getGenericType", Vector.class);
Type[] type = method.getGenericParameterTypes();
ParameterizedType pType = (ParameterizedType)type[0];
System.out.println(pType.getRawType());
System.out.println(pType.getActualTypeArguments()[0]);
}
public static void getGenericType(Vector<Data> v){
}
}
打印結果:
class java.util.Vector
interface javax.xml.crypto.Data