リストが関与していない限り、私はこの問題の解決策をいくつか見てきたので、何かができるかどうか確認するために私の運を押しています。Java、Gson、リストとGenerics
私はジェネリックスを使用して重複したコードを分解したいと考えています。おそらくタイプ消去に関係している人がいます。まず、ここでは重複したコードのサンプルです:
実行時にprivate void readsFoo() throws Exception {
JsonArray jsonArray = getJsonArray(foo_field);
List<Foo> fooList = getElementsList(jsonArray);
for (Foo foo: fooList) {
.....
}
}
private <T> List<T> getElementsList(JsonArray iArray)
{
Type listType = new TypeToken<List<T>>() {}.getType();
validateJsonElement(listType, "In getElementsList: Unable to find field TypeTokens");
List<T> list = gson.fromJson(iArray, listType);
validateJsonElement(list, "In getElementsList: Unable to find list from Json");
return list;
}
が、私は次のエラーを得た:今
private void readsFoo() throws Exception {
JsonArray jsonArray = getJsonArray(foo_field);
Type listType = new TypeToken<List<Foo>>() {
}.getType();
List<Foo> fooList= gson.fromJson(jsonArray, listType);
for (Foo foo : fooList) {
.....
}
}
private void readsGoo() throws Exception {
JsonArray jsonArray = getJsonArray(goo_field);
Type listType = new TypeToken<List<Goo>>() {
}.getType();
List<Goo> gooList= gson.fromJson(jsonArray, listType);
for (Goo goo : gooList) {
.....
}
}
が、ここで私は自分自身を生成するコードがあるとjava.lang.ClassCastException :com.google.gson.internal.LinkedTreeMapはキャストできません.... json.Foo
この問題を解決する方法はありますか?率直に私は再利用可能なコードが嫌いです。 ありがとう!
あなたのコード(両方のバージョン)をデバッグして、両方のバリエーションに 'listType'が入っていることを確認しましたか?スタックトレースを投稿できますか? – Thomas