Java 用泛型调用方法
我正在使用一个返回JSON的服务,这个JSON可以转换为Map(我使用GoogleGSON库进行转换)。我需要从这个映射中获取一组值。 首先,我有下一个结构:Java 用泛型调用方法,java,generics,Java,Generics,我正在使用一个返回JSON的服务,这个JSON可以转换为Map(我使用GoogleGSON库进行转换)。我需要从这个映射中获取一组值。 首先,我有下一个结构: public Set<ProfileShow> getShows() { String json = ...; //getting JSON from service if (!Utils.isEmptyString(json)) { Map<String, ProfileShow>
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();
}
感谢您的帮助。也许最简单的方法是将
类型
的类型更改为类型
,然后传入新类型标记(){}.getType()
或类似的内容
如果你真的想,我想你可以构造参数化类型
public static <T> T fromJSON(String json, Type type) {
return new Gson().fromJson(json, type);
}
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();
}
Utils.setFromJSON(json, Episode.class.getGenericSuperclass()); //doesn't work