java 反射機制 (獲取父類泛型的類型)getGenericSuperclass

1.首先, T.getClass() 或 T.class都是非法的,因爲T是泛型變量; 

    由於一個類的類型在編譯期已確定,故不能在運行期得到T的實際類型;

2.獲取方式是:

Class <T> entityClass = (Class <T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 

3.例子:

 public class Person<T> {
 
 }

 public class Student extends Person<Student> {
 public static void main(String[] args) {
	 Student st=new Student();
	 Class clazz=st.getClass();
	 //getSuperclass()獲得該類的父類
	 System.out.println(clazz.getSuperclass());
	 //getGenericSuperclass()獲得帶有泛型的父類
	 //Type是 Java 編程語言中所有類型的公共高級接口。它們包括原始類型、參數化類型、數組類型、類型變量和基本類型。
	 Type type=clazz.getGenericSuperclass();
	 System.out.println(type);
	 //ParameterizedType參數化類型,即泛型
	  ParameterizedType p=(ParameterizedType)type;
	  //getActualTypeArguments獲取參數化類型的數組,泛型可能有多個
	  Class c=(Class) p.getActualTypeArguments()[0];
	  System.out.println(c);
	 }
 }


打印結果:
 class com.test.Person
 com.test.Person<com.test.Student>
 class com.test.Student

根據測試  能獲取到父類泛型類型,但是不能獲取到類實現的接口的泛型類型 


於此相關的文章有:http://www.blogjava.net/leisure/archive/2011/12/26/367185.html

                                  http://blog.csdn.net/z69183787/article/details/42142977

可進行參考(對於一些底層的封裝思路有幫助)


發佈了30 篇原創文章 · 獲贊 7 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章