[英]java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.google.gson.internal.LinkedTreeMap
[英]generic method passing parramaters - java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap
我有一个简单的通用类:
public class OwnedCollection<T extends BaseObject> extends BaseObject {
private String playerId;
private List<T> collection;
public OwnedCollection(String playerId, List<T> collection) {
super(playerId);
this.playerId = playerId;
this.collection = collection;
}
}
我想从json反序列化它。 我正在使用Gson库,所以当我拨打电话时:
OwnedCollection<Skin> fromJson = new Gson().fromJson(json, new TypeToken<OwnedCollection<Skin>>() {}.getType());
一切都很好。
但是,当我尝试创建执行此操作的方法时,会出现异常。 我尝试了以下方法:
public <T extends BaseObject> OwnedCollection<T> deserialize1(String json, Class<T> type) {
Gson gson = new Gson();
return gson.fromJson(json, new TypeToken<T>() {
}.getType());
}
并调用:
OwnedCollection<Skin> deserialize1 = deserialize1(json, Skin.class);
我得到:
java.lang.ClassCastException: org.miracledojo.karatedo.domen.item.Skin cannot be cast to org.miracledojo.karatedo.domen.item.OwnedCollection
然后:
public <T extends BaseObject> OwnedCollection<T> deserialize2(String json, Type type) {
Gson gson = new Gson();
return gson.fromJson(json, type);
}
并调用:
deserialize2(json, Skin.class);
然后我得到:
java.lang.ClassCastException: org.miracledojo.karatedo.domen.item.Skin cannot be cast to org.miracledojo.karatedo.domen.item.OwnedCollection
有人有什么想法吗? 就像是:
OwnedCollection<Skin>.class
是不可能的,所以有没有类似的sintax?
您为GSON解析器提供了错误的类型令牌,请将类型令牌更改为类型T的OwnedCollection
public <T extends BaseObject> OwnedCollection<T> deserialize1(String json, Class<T> type) {
return new Gson().fromJson(json, new TypeToken<OwnedCollection<T>>(){}.getType());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.