java gson解析_Gson解析泛型

本文详细介绍了如何使用Gson解析Java泛型,通过创建自定义的ParameterizedTypeImpl类,结合TypeToken和Type的实际应用,解决Gson无法直接处理泛型的问题。通过获取Class的GenericSuperclass并转换为ParameterizedType,实现对泛型类的正确解析,适用于处理网络请求的泛型封装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做网络请求的时候肯定要封装回调,我这里就传了泛型,但是出了个问题是Gson没办法直接解析泛型,如果直接解析的话,不会得到一个javabean而是得到一个LinkedTreeMap。

然后我去网上找了很就,都没有直接能把LinkedTreeMap转成javabean的方法,但是我们不可能给每个请求的结果都单独去写一个解析,这时候我们就不得不去正面一个问题:如何使用Gson来解析泛型

而我这篇文章都会去围绕这个问题去讲,表面上讲gson,实际上是讲java的type

因为是分2天写的,前面有点乱,可以直接看总结

一.使用Gson来解析JSON

我们先看看平时如何使用Gson来解析json,就假设有个Test类吧。

Test test = gson.fromJson(json, Test.class);

一般在明确对象类型之后我们确实可以这样做,但是如果是泛型呢

T test = gson.fromJson(json, T.class);

肯定不能这样玩,这不符合泛型的思想,而且也没有T.class,所以需要换种方法来做

4f797b1f8011

这个方法的第二个参数是传一个Type,我们可以来看看什么是Type

4f797b1f8011

都知道能理解成是一个类型的接口,但是从include这句话可以更加清楚的知道他是一个什么意思。

二.获取Type

一般你可以很容易的找到这样做

Type type = new TypeToken() {}.getType();

JsonBean jsonBean = gson.fromJson(json, type);

然后你觉得如果解析泛型的话可以这样

Type type = new TypeToken() {}.getType();

JsonBean jsonBean = gson.fromJson(json, type);

这个我没试过,但是我知道如果传的不是泛型,而是一个包含泛型的类,最后解析出来的还是LinkedTreeMap,比如这样

Type type = new TypeToken>() {}.getType();

JsonBean jsonBean = gson.fromJson(json, type);

因为一般网络请求的数据结构我们都会这样做Result,而这样是没法正常解析出我们想要的对象的。

这个时候网上就有一篇文章写得特别好

https://www.jianshu.com/p/d62c2be60617

可以看到需要重写一个类继承ParameterizedType

public class ParameterizedTypeImpl implements ParameterizedType {

private final Class ra

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值