Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用泛型调用方法_Java_Generics - Fatal编程技术网

Java 用泛型调用方法

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>

我正在使用一个返回JSON的服务,这个JSON可以转换为Map(我使用GoogleGSON库进行转换)。我需要从这个映射中获取一组值。 首先,我有下一个结构:

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