繁体   English   中英

传递参数的通用方法-java.lang.ClassCastException: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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM