java反射使用(dao中獲取子類的類型)

   在設計Dao的時候,我們常會用泛型進行設計。比如:基類Dao<T>  ,子類SimpleDao<T> extends Dao<T>,實體類PersonDao extends SimpleDao<Person> ,通常我們會把常用方法抽出來放在SimpleDao<T> 類中,使用泛型方式進行實現,比如 增、刪、改、查等,Add(T),remove(T),update(T),find(T) 其中增刪改都可以直接用T泛型來實現,但是查找的時候,無法通過T去獲取具體類型的class。

   解決思路:PersonDao的父類中包含我們所需要的person對象,因此我們可以使用getClass方法獲取person對象類,根據getGenericSuperclass獲取父類,返回type數據 SimpleDao<Person> ,現在我們需要獲取其中的Person信息,把該type強轉爲ParameterizedType然後調用getActualTypeArguments方法,獲得type數組,第一個元素就是Person,仍然需要強轉成Class,就可以進行相關操作。代碼如下:

public abstract class SimpleDao<T> implements Dao<T> {

    private Class<T> entityClass;

    public SimpleDao() {
        Class class1 = getClass();
        Type genericSuperclass = class1.getGenericSuperclass();
        ParameterizedType params = (ParameterizedType) genericSuperclass;
        Type[] actualTypeArguments = params.getActualTypeArguments();
        this.entityClass = (Class) actualTypeArguments[0];
    }

}

getClass表示獲取調用類的class,最終是personDao來調用simpleDao,所以getClass得到的是impleDao<Person>

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