从fastjson的TypeReference⽤法,推导如何实现泛型反射1.fastjson带泛型反序列化的⽤法
fastjson
2.我们来看看TypeReference的源码是什么
TypeReference
* 我们发现TypeReferenced的构造⽅法是保护⽅法,也就是你⽆法直接实例化,你实例化出来的都是TypeReference的匿名⼦类
* 在构造⽅法⾥⾯有些我们平常没接触过的东西他们是什么呢?
3.下⾯我来看看TypeReference构造⽅法中到底是些什么东西
* 构造⽅法中第⼀句,从字⾯上的意思解释就是获取当前对象的泛型⽗Class,实际上他的作⽤也是这样的
Type superClass = Class().getGenericSuperclass();
* 第⼆句就是获取泛型⽗Class的泛型参数
4.Ok!下⾯我们通过⾃⼰的例⼦来获取泛型对象的泛型实际参数
*⽬的:通过FanDemo获取FanDto泛型类型
第⼀步够着两个类,⼀个是实际的泛型对象FanDto,⼀个是⽤来获取泛型参数的类FanDemo
FanDto
FanDto
第⼆步我们获取⽗泛型类FanDemo
获取FanDemo
输出结果:
输出结果
我发现我们已经获取到了泛型⽗类FanDemo
第三步通过泛型⽗类获取⽬的泛型类FanDto
泛型⽗类类型为ParameterizedType类型,通过getActualTypeArguments获取泛型参数数组
fastjson怎么用获取FanDto
输出结果:
输出结果
这个时候我们获取到了我们想要的泛型对象FanDto,接下来我们需要获取FanDto的泛型参数
第四步 获取FanDto的泛型参数T的类型
获取泛型参数T
输出结构为:
输出结果
这个时候我们得到了FanDto的泛型类型为String,ok ⼤功告成
最后通过获取泛型对应的字段
获取泛型对应的字段
输出结果为:
输出结果
注:泛型类型在编译的时候都会别转成Object不会留下任何预设对象的信息,所以必须要通过这种⽅式才能获取到泛型类型,这数据泛型擦除的内容,这⾥我就不细讲了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论