Java中的getGenericSuperclass的基本用法


通過getGenericSuperclass方法可以獲取當前對象的直接超類的Type,使用該方法可以獲取到泛型T的具體類型

package cn.tzz.lang.clazz;

public class User {

	private Integer id;
	private String name;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

  

public class BaseHibernateDao<T,ID extends Serializable> {
	
	private Class<T> clazz;
	
	public BaseHibernateDao(){
		//當前對象的直接超類的 Type
		Type genericSuperclass = getClass().getGenericSuperclass();
		if(genericSuperclass instanceof ParameterizedType){
			//參數化類型
			ParameterizedType parameterizedType= (ParameterizedType) genericSuperclass;
			//返回表示此類型實際類型參數的 Type 對象的數組
			Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
			this.clazz= (Class<T>)actualTypeArguments[0];
		}else{
			this.clazz= (Class<T>)genericSuperclass;
		}
	}

	public Class<T> getClazz() {
		return clazz;
	}
}

  

public class UserService extends BaseHibernateDao<User, Integer>{

}

  

測試實例:

public class TestUserService {
	public static void main(String[] args) {
		UserService userService = new UserService();
		System.out.println(userService.getClass());
	}
}

  

運行結果:

class cn.tzz.lang.clazz.User

 

via:http://blog.csdn.net/tanksyg/article/details/49928115

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM