我有一個簡單的泛型類:泛型方法傳遞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?
看起來你應該在你的'deserialize1'使用'新TypeToken>'方法,而不是'新的TypeToken ' –
@IvanPronin我可以序列化它的方式,但不是在適當的對象。當我嘗試調用泛型類中的某個方法時,我也得到java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap無法轉換爲org.miracledojo.karatedo.domen.BaseObject –