欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Gson对泛型的支持(TypeToken的使用)

程序员文章站 2022-03-13 12:53:35
...

简单例子

List < Person > ps = gson.fromJson(str, new TypeToken < List < Person >> (){}.getType());

特别注意:
TypeToken在创建对象的时候(编译时)就要指明类型,以下情况是错误的:

public class ApiTask<T> {
    private final Type mType;
    private final Gson mGson;
 
    public ApiTask() {
        mType = new TypeToken<ResCommon<T>>() {
        }.getType();
        mGson = new Gson();
    }
}

以上形式的代码在调用mGson.fromJson(json,mType)方法时就会抛出如下异常:

Caused by: java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.xxx

正确的例子:

public class ApiTask {
    private final Type mType;
    private final Gson mGson;
 
    public ApiTask( Type type ) {
        mType=type;
        mGson = new Gson();
    }
}
 
//创建 TypeToken对象时,<>括号中的类型都是确定的
new  ApiTask  ( new TypeToken<ResCommon<ReqRider>>() {}.getType())

或者:

public class ApiTask<T> {
    private final Type mType;
    private final Gson mGson;
 
    public ApiTask( TypeToken<ResCommon<T>> typeToken ) {
        mType=typeToken.getType();
        mGson = new Gson();
    }
}
 
//使用
new ApiTask<>(new TypeToken<ResCommon<ReqRider>>(){});

作者:斑马搬码
來源:简书
链接:https://www.jianshu.com/p/af29a1c0c1e5

相关标签: Gson