3

重複の可能性:
gsonを使用したジェネリックスの逆シリアル化

だから私はする必要があります:

Type fluentType = new TypeToken<BruteForceFluentImpl<GtlDigestor.Data>>() {}.getType();

それ以外の

Type fluentType = new TypeToken<Fluent<T>>() {}.getType(); // <-- i want to be able to do something like this.

String json = gson.toJson(fluent, fluentType);

つまり、Fluentクラスに異なる型パラメーターを指定する必要があるたびに、それを指定するためにコードを変更する必要があります。現在、typeパラメーターはGtlDigestor.Dataです。

どうすればよいですか?(コードの2行目は機能しません)

4

1 に答える 1

3

Gsonはこの情報を保存する必要があるため、実行時に実際のパラメーター化されたタイプ(たとえばBruteForceFluentImpl<GtlDigestor.Data>、実際のランタイムrawタイプと実際のタイプパラメーター値を含む)をGsonに通知する必要があります。

を使用TypeTokenするのが最も簡単な方法ですがType、それを使用するには、ソースに正確な型をハードコーディングする必要があります(のような型パラメーターはありませんT)。さまざまなタイプで再利用されるメソッドにコードを配置する場合は、おそらくこのメソッドはType、呼び出し元が渡す必要のあるパラメーターとしてを受け入れる必要があります。その後、タイプをでハードコーディングできます。発信者の場所。それぞれがおそらく固定タイプのみを使用します。

Typeまたは、生の型と型パラメーターに基づいて実行時に完全に動的に生成する必要がある場合は、ここでの質問に対する私の答えを参照してください。

于 2012-06-05T00:57:05.127 に答える