0
マップに変換できるJSONを返すサービスで作業しています(私はgoogle-gsonを使って変換しています)。私はこのマップから値のセットを取得する必要があります。 まず、私は次の構造を持っていた:ジェネリックでの呼び出しメソッド
public Set<ProfileShow> getShows() {
String json = ...; //getting JSON from service
if (!Utils.isEmptyString(json)) {
Map<String, ProfileShow> map = Utils.fromJSON(json, new TypeToken<Map<String, ProfileShow>>() {
}.getType());
Set<ProfileShow> result = new HashSet<ProfileShow>();
for (String key : map.keySet()) {
result.add(map.get(key));
}
return result;
}
return Collections.emptySet();
}
public Set<Episode> getUnwatchedEpisodes() {
String json = ...; //getting JSON from service
if (!Utils.isEmptyString(json)) {
Map<String, Episode> map = Utils.fromJSON(json, new TypeToken<Map<String, Episode>>() {
}.getType());
Set<Episode> result = new HashSet<Episode>();
for (String key : map.keySet()) {
result.add(map.get(key));
}
return result;
}
return Collections.emptySet();
}
Utils.fromJSON方法:あなたが見ることができるように
public static <T> T fromJSON(String json, Type type) {
return new Gson().fromJson(json, type);
}
を、メソッドgetShows()とgetUnwatchedEpisodes()と同じ構造を有しています。違いは、返されるSetのパラメータ化された型だけです。
public static <T> Set<T> setFromJSON(String json, T type) {
if (!isEmptyString(json)) {
Map<String, T> map = fromJSON(json, new TypeToken<Map<String, T>>() {
}.getType());
Set<T> result = new HashSet<T>();
for (String key : map.keySet()) {
result.add(map.get(key));
}
return result;
}
return Collections.emptySet();
}
しかし、今、私は適切な方法でこのメソッドを呼び出す方法こだわっている:だから、私は、JSONからutilのメソッドに設定して得る移動することを決めました。何かのように
Utils.setFromJSON(json, Episode.class.getGenericSuperclass()); //doesn't work
ありがとうございます。