我是靠谱客的博主 疯狂丝袜,最近开发中收集的这篇文章主要介绍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:参数)字面翻译为: 得到真实的类型参数,即泛型对应的真实类。

最后

以上就是疯狂丝袜为你收集整理的Spring不支持带泛型创建对象的全部内容,希望文章能够帮你解决Spring不支持带泛型创建对象所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部