妳這樣是得不到Users的,原因是這樣的:
//取得該類的實體類型
Type genType = clazz.getGenericSuperclass();
//判斷該類是否是泛型類
if(!(genType instanceof ParameterizedType)) {
return Object.class;
}
妳在使用泛型DAO的時候,采用的是直接使用泛型DAO類:
HibernateGenericDao<Users> dao = new HibernateGenericDao<Users>();
所以,這個dao的類型仍然是HibernateGenericDao;
使用getGenericSuperclass()方法得到的就是這個類的父類,Object;所以妳直接返回了壹個Object.class,註意,為什麽這個方法的名字叫做getGenericSuperclass(),這個superclass已經說明了要使用反射獲得具體的泛型類型的方式應該是:
class UserDAO extends HibernateGenericDao<User> implements IUserDAO{}
這樣就行了,壹定要有壹個具體類型的子類,UserDAO裏面的泛型類型(User)才能夠被固定下來。
另外也不用嘗試直接把HibernateGenericDao轉型為ParameterizedType,因為就算妳代碼為:
HibernateGenericDao<Users> dao = new HibernateGenericDao<Users>();
妳dao.getClass得到的仍然是HibernateGenericDao<T>,這個T對於dao的類型來說,仍然只是個泛型類型,不會是真實的User.class
所以,如果妳要堅持直接使用HibernateGenericDAO的話,建議妳把User.class作為壹個構造方法參數穿進去就可以了。