通用Dao原理

使用getGenericSuperclass()和getActualTypeArguments()將DAO做成泛型


package com.ponderingtech;

import java.lang.reflect.ParameterizedType;


public class Dao<T> {

	Class<T> clz;
	
	@SuppressWarnings("unchecked")
	public Class<T> getEntityClass() {
		if(clz == null) {
			ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
			clz = (Class<T>) type.getActualTypeArguments()[0];
		}
		return clz;
	}
}

package com.ponderingtech;


public class Test extends Dao<Integer> {

	
	 
	 @Override
	public String toString() {
		return "entityClass="+getEntityClass()+", entityName="+getEntityClass().getSimpleName();
	}

	public static void main(String[] args) {

		Test t = new Test();
		System.out.println(t);// 輸出結果爲entityClass=class java.lang.Integer, entityName=Integer
        }
}

說明: getGenericSuperclass() 通過反射獲取當前類表示的實體(類,接口,基本類型或void)的直接父類的Type,getActualTypeArguments()返回參數數組,getActualTypeArguments()[0] 即返回Dao中的泛型Integer。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章