こんにちは、ナムです。
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に慣れていない僕はやはり勉強になりました。初心者の方に参考になれると嬉しいです。
では、短いですが、以上です。