private Class clazz;
// 在父类中提供有参数的构造方法:
public BaseDaoImpl() {
// 如果去掉子类的构造方法,就必须在父类中提供无参数的构造,而且在父类无参数的构造方法中,获得具体类型的Class。
// 需要使用泛型的反射。
// 获得具体子类的Class对象。
Class c = this.getClass(); // 代表的子类的Class,CustomerDaoImpl或者LinkManDaoImpl的Class
// 通过Class获取带有泛型的父类:
Type type = c.getGenericSuperclass(); // 获得的是BaseDaoImpl<Customer>或者是BaseDaoImpl<LinkMan>
System.out.println("type======"+type);
// BaseDaoImpl<Customer>其实就是参数化的类型,将type强转为参数化的类型
ParameterizedType pType = (ParameterizedType) type;//BaseDaoImpl<Customer> 或者是BaseDaoImpl<LinkMan>
// 调用参数化类型中的方法,获得实际类型的参数:
Type[] types = pType.getActualTypeArguments(); // 获得实际类型参数的数组。但实际中只有一个 Customer或LinkMan
// 获得具体的实际类型参数:Customer或者LinkMan
this.clazz = (Class) types[0];
}
关于父类泛型反射
本文介绍了一种在Java中使用泛型反射获取子类具体类型的方法。通过父类构造方法中的泛型反射技术,可以获得带有泛型参数的具体子类类型,如Customer或LinkMan。这一技巧对于实现通用的数据操作类非常有用。

被折叠的 条评论
为什么被折叠?



