私は、単純なジェネリッククラスを持っている:ジェネリックメソッド渡し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からそれをデシリアライズします。
OwnedCollection<Skin> fromJson = new Gson().fromJson(json, new TypeToken<OwnedCollection<Skin>>() {}.getType());
すべてが正常に動作している:私は、私はラインを呼び出すとそう 、Gsonライブラリを使用しています。
しかし、私はこれを行うためのメソッドを作成しようとすると例外が発生します。 私は次のことを試してみました:
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
ルックスメソッドの代わりに 'new TypeToken' –
@IvanProninを使用しています。この方法ではシリアル化できますが、適切なオブジェクトではできません。ジェネリッククラスのメソッドを呼び出そうとすると、java.lang.ClassCastExceptionが発生します。com.google.gson.internal.LinkedTreeMapはorg.miracledojo.karatedo.domen.BaseObjectにキャストできません –