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
上一篇: 二分法查找
下一篇: 367. 有效的完全平方数