BaseDaoImpl中使用泛型來反向獲得當前的實體類
阿新 • • 發佈:2019-02-17
看到一些專案的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)的第一個元素,從而獲得泛型引數的實際型別