Spring不支持带泛型创建对象

问题引入:
BaseDaoImpl<T>为什么不能在applicationContext.xml文件中创建bean。
实例:

解析:
类似于本例中的构造方法,在方法中,需要得到BaseDaoImpl<T>中的泛型,则先将通过this.getClass()方法获取BaseDaoImpl<T>,然后转换为ParameterizedType类(参见末尾附言部分),然后通过ParameterizedType.getActualTypeArguments();方法可以得到<>中的所有泛型类型,但是如果将BaseDaoImpl在applicationContext.xml文件中创建bean,然后以此获取BaseDaoImpl对象进行使用,如图:

则运行时会报如下错误:

ERROR:Class类型不能转换为ParameterizedType类型
疑问:
BaseDaoImpl<T>不是泛型嘛,为什么不能转换为ParameterizedType类型。
原因:
Spring不支持带泛型的类创建对象,因此,当Spring为BaseDaoImpl<T>创建对象时,只把BaseDaoImpl<T>当做BaseDaoImpl进行创建,因此this.getClass().getGenericSuperclass()返回的是class类型,而不是ParameterizedType,所以也就无法从Class类型转换为ParameterizedType类型。

附言:
ParameterizedType就是Java中的泛型,属于Type的子类。
ParameterizedType.getActualTypeArguments(),(Actual:真实的,目前的,实际的;Arguments:参数)字面翻译为:得到真实的类型参数,即泛型对应的真实类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值