Java-TypeToken原理及泛型擦除,推荐深入linux内核架构

使用

使用过Gson的同学都知道在反序列化时需要定义一个TypeToken类型,像这样

private Type type = new TypeToken<List<Map<String, Foo>>>(){}.getTy

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

pe();

//调用fromJson方法时把type传过去,如果type的类型和json保持一致,则可以反序列化出来

gson.fromJson(json, type);

三个问题

为什么要用TypeToken来定义反序列化的类型?正如上面说的,如果直接把List<Map<String, Foo>>的类型传过去,但是因为运行时泛型被擦除了,所以得到的其实是List,那么后面的Gson就不知道要转成Map<String, Foo>类型了,这时Gson会默认转成LinkedTreeMap类型。

为什么带有大括号{}?这个大括号就是精髓所在。大家都知道,在Java语法中,在这个语境,{}是用来定义匿名类,这个匿名类是继承了TypeToken类,它是TypeToken的子类。

为什么要通过子类来获取泛型的类型?这是TypeToken能够获取到泛型类型的关键,这是一个巧妙的方法。这个想法是这样子的,既然像List这样中的泛型会被擦除掉,那么我用一个子类SubList extends

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值