<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="white-space:pre"> </span>//三大框架学完了,现在自己正在创建基类这样Hibernate的操作就不用一个一个去创建。所以需要调用泛型getGenericSuperclass 来解决这个问题。希望我能把这个问题说明白</span>
现在我先定义三个类 class Dao<T>(泛型基类),class UserDao extends Dao<Book>(子类),class Book(T)
public class Dao<T>{
private Class<T> beanClass;
public Dao(){
//Dao<T> dao = new Dao<T>();
System.out.println("Dao "+ this);
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
beanClass = (Class<T>)type.getActualTypeArguments()[0];
System.out.println("dao<T>:" + beanClass.getName());
System.out.println(this.getClass().getSuperclass().getName());
}
}
public class UserDao extends Dao<Book>{
public UserDao(){
System.out.println("bookDao:" + this);
}
}
public class Book {
}
@Test
public void testClass4(){
UserDao userDao = new UserDao();
Type type = userDao.getClass().getGenericSuperclass();
//System.out.println(type.);
}
从打印的结果可以看出getGenericSuperclass 是得到泛型的父类即Dao<T>,getSuperclass只能得到父类Dao。参照API可以得到Type是共同超级父类接口且没有实现任何方法,所有必须强制转换成子接口ParameterizedType(汉文就是被参数化的类)因为这个接口中有个一个方法getActualTypeArguments()由它,我们可以得到真正子类传递过来的泛型的类,由此我们就可以来做个工具类,利用泛型。