概述
问题引入:
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:参数)字面翻译为:
得到真实的类型参数,即泛型对应的真实类。
最后
以上就是疯狂丝袜为你收集整理的Spring不支持带泛型创建对象的全部内容,希望文章能够帮你解决Spring不支持带泛型创建对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复