美文网首页
从fastjson的TypeReference用法,推导如何实现

从fastjson的TypeReference用法,推导如何实现

作者: 三言两语2 | 来源:发表于2017-08-25 09:58 被阅读0次

    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不会留下任何预设对象的信息,所以必须要通过这种方式才能获取到泛型类型,这数据泛型擦除的内容,这里我就不细讲了

    相关文章

      网友评论

          本文标题:从fastjson的TypeReference用法,推导如何实现

          本文链接:https://www.haomeiwen.com/subject/kotudxtx.html