gpt4 book ai didi

java - 使用泛型调用方法

转载 作者:行者123 更新时间:2023-12-01 15:33:11 24 4
gpt4 key购买 nike

我正在使用一个返回 JSON 的服务,该 JSON 可以转换为 Map(我正在使用 google-gson lib 进行转换)。我需要从此映射中获取值集。首先,我有以下结构:

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 的参数化类型。因此,我决定将获取 Set 从 JSON 转移到 util 方法:

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

感谢您的帮助。

最佳答案

也许最简单的事情就是更改 type 的类型至Type ,并传入new TypeToken<Map<String, ProfileShow>>() { }.getType()或类似的。

我猜你可以构造ParameterizedType如果你真的想要的话。

关于java - 使用泛型调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9313880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com