summary-getGenericSuperclass

常用的一个工具类

gson可以用以字符串与对象之间进行转换,gson会将json字符串中的键值对与类的成员变量进行匹配,多余的字符串不会赋值,缺少的字符串会令成员变量为空。fromJson这个函数的笫二个参量需要传入一个tpye类型的子类,class类型实现了type接口,因此一般情况下下传入xx.getClass就可以了。

但是,考虑另外一种场景。如果使用的类是

的话,通过getClass是无法获取的其中的泛型类型的,因此在进行转换的时候是有问题的。

第一次接触是看到传入这个参数:

getType返回的是TypeToken中的一个成员变量type,这个type是通过下面的方法获取

这里传进来的参数

是在构造方法中通过this.getClass()获取。实际上,

这一步的时候,就已经得到了

这个类型,如果这个类型没有泛型的话,会抛出一个异常,否则,会被转换成类型,这个类可以获取泛型的类型。

实际上,过程就是TypeToken通过得到了,通过进行转换,然后用方法获取了,ok,接下来交给Gson就可以了。

但,这里有一点小问题,通过得到了,超类就是自己,这要归功于;new出来了一个的匿名内部子类,因此,匿名内部子类getClass的时候,通过debug可以看出并非。

再理一下,Gson传进去的第二个参数是Type的一个子类,如果要想获取包含泛型类的类型的话,就要依靠,实际上满足两点就可以,1泛型类作为某个跳板类的泛型参数传入。2是需要一个匿名内部类来获取带有泛型的超类,即这个方法。

因此可以试一下:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180725G08AMM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券