关于父类泛型反射

本文介绍了一种在Java中使用泛型反射获取子类具体类型的方法。通过父类构造方法中的泛型反射技术,可以获得带有泛型参数的具体子类类型,如Customer或LinkMan。这一技巧对于实现通用的数据操作类非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值