1. 程式人生 > >BaseDaoImpl中使用泛型來反向獲得當前的實體類

BaseDaoImpl中使用泛型來反向獲得當前的實體類

看到一些專案的BaseDaoImpl裡常常使用泛型來反向獲得當前的實體類。程式碼片段如下:

public class BaseDaoImpl <T,PK extends Serializable> implements BaseDao<T, PK>
@SuppressWarnings("unchecked")
    public BaseDaoImpl(){
        this.entityClass = null;
        Class<?> c = getClass();
        Type t = c.getGenericSuperclass();
        if
(t instanceof ParameterizedType) { Type[] p = ((ParameterizedType) t).getActualTypeArguments(); this.entityClass = (Class<T>) p[0]; System.out.println(this.entityClass.getName()); } }

該方法使用了java的反射機制獲得直接父類type,再通過getActualTypeArguments()獲得type物件的陣列(例子中p[0]表示T,p[1]表示PK)的第一個元素,從而獲得泛型引數的實際型別