GsonでList<T>
をデシリアライズするのがけっこう面倒くさくて、以下のようにしなければいけません*1。
Type collectionType = new TypeToken<Collection<Integer>>(){}.getType();
List<Integer> ints2 = gson.fromJson(json, collectionType);
ところが、List
java - Gson TypeToken with dynamic ArrayList item type - Stack Overflow
というわけで以下のようなユーティリティクラスをつくって幸せになりました。 $Gson$Typesはだいぶ怪しいのでGson自体にそういうインターフェイスがあるといいんですけどね。
public class GsonUtils { public static <T> T objectFromJson(String json, Class<T> clazz) { return GsonHolder.GSON.fromJson(json, clazz); } public static <T> List<T> objectsFromJson(String json, Class<T> clazz) { Type type = $Gson$Types.newParameterizedTypeWithOwner(null, ArrayList.class, clazz); return GsonHolder.GSON.fromJson(json, type); } }