Java
Android
Generic

Genericタイプを用いるGsonパーザーを実装するメモ

More than 3 years have passed since last update.

こんにちは、ナムです。

REST APIのCallback<T extends GeneralObject> のようにレスポンスをGenericタイプとして使用し、あとGsonを用いてレスポンスオブジェクトを習得する手順を実装しました。悩んだこととその解決についてメモにしました。


実装したいメソッド

public T parse(String raw) {

return ...;
}

ここで、gsonを使用すると、どうするかわからなくて悩みました。

return gson.fromJson(raw, 

xxx // ここはなになるかわからない
// Class<T> のインスタンスまたはTypeインスタンスとなりますが、
// ただのGeneric Type 'T'しか持っていないから〜
);


解決

一行で終わりそうです。

// ここはポイントです

Type type = ((ParameterizedType) this.getClass().getGenericSuperclass())
.getActualTypeArguments()[0]; // <-- 複数のタイプの場合もありますね。

return gson.fromJson(raw, type);

わかっている方がたくさんいるかもしれませんが、javaのGenericに慣れていない僕はやはり勉強になりました。初心者の方に参考になれると嬉しいです。

では、短いですが、以上です。