通過反射技術,獲取泛型類的真實類型

如果在父類中想要獲取泛型T的類型 

T.class; 

T.getClass(); 

這兩種方法都是無法實現的,因爲泛型T不是一個真正的類或者實例

下面的代碼將介紹如何通過反射獲得泛型T的真實的類的類型

 

import java.lang.reflect.ParameterizedType;

@SuppressWarnings("unchecked")
public class Base<T> {
	/**
	 * 如果在父類中想要獲取泛型T的類型 
	 * T.class; 
	 * T.getClass(); 
	 * 這兩種方法都是無法實現的,因爲泛型T不是一個真正的類或者實例
	 */

	private Class<T> clazz;

	// 通過反射技術,獲取泛型類的真實類型
	public Base() {

		ParameterizedType pt = (ParameterizedType) this.getClass()
				.getGenericSuperclass();// 這裏面的this代表的是子類的實例
		this.clazz = (Class<T>) pt.getActualTypeArguments()[0];// 獲取第一個類型參數的真實類型
		System.out.println("---> clazz : " + this.clazz);
	}

}

 

public class User extends Base<User> {

}

 

public class Role extends Base<Role> {

}

 

import org.junit.Test;

public class TestGeneric {
	@Test
	public void test(){
		User user = new User();
		Role role = new Role();
	}
}

 輸出:

---> clazz : class User

---> clazz : class Role

打印除了真的泛型的類的類型

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