从fastjson的TypeReference用法,推导如何实现泛型反射

1.fastjson带泛型反序列化的用法

fastjson

 

2.我们来看看TypeReference的源码是什么

TypeReference

* 我们发现TypeReferenced的构造方法是保护方法,也就是你无法直接实例化,你实例化出来的都是TypeReference的匿名子类
* 在构造方法里面有些我们平常没接触过的东西他们是什么呢?

3.下面我来看看TypeReference构造方法中到底是些什么东西

* 构造方法中第一句,从字面上的意思解释就是获取当前对象的泛型父Class,实际上他的作用也是这样的

Type superClass = this.getClass().getGenericSuperclass();

* 第二句就是获取泛型父Class的泛型参数

this.type = ((ParameterizedType)superClass).getActualTypeArguments()[0];

4.Ok!下面我们通过自己的例子来获取泛型对象的泛型实际参数

     *目的:通过FanDemo获取FanDto泛型类型

第一步够着两个类,一个是实际的泛型对象FanDto,一个是用来获取泛型参数的类FanDemo

FanDto

 

FanDto

第二步我们获取父泛型类FanDemo

获取FanDemo


输出结果:

 

输出结果

我发现我们已经获取到了泛型父类FanDemo

第三步通过泛型父类获取目的泛型类FanDto
泛型父类类型为ParameterizedType类型,通过getActualTypeArguments获取泛型参数数组

获取FanDto

 

输出结果:

输出结果

这个时候我们获取到了我们想要的泛型对象FanDto,接下来我们需要获取FanDto的泛型参数
第四步 获取FanDto的泛型参数T的类型

获取泛型参数T

输出结构为:

输出结果

 

这个时候我们得到了FanDto的泛型类型为String,ok 大功告成

最后通过获取泛型对应的字段

获取泛型对应的字段

 

输出结果为:

输出结果

注:泛型类型在编译的时候都会别转成Object不会留下任何预设对象的信息,所以必须要通过这种方式才能获取到泛型类型,这数据泛型擦除的内容,这里我就不细讲了


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值