类类型引用不传入java泛型类或方法

时间:2016-02-25 09:30:15

标签: java android generics

这是调用泛型类方法的方法。

ServiceHandler<MyClass> serviceHandler = new ServiceHandler<MyClass>();
    List<MyClass> res = serviceHandler.genericGetAll("https://api.github.com/users/hadley/orgs", MethodTypes.GET.toString(), null);

这是具有泛型方法的泛型类

public class ServiceHandler<T>{
 public ServiceHandler() {

    }
 public List<T> genericGetAll(String destinationUrl, String method, HashMap<String, String> params) {
        List<T> genericResponse = null;
        String httpResponse = httpClient(destinationUrl, method, params);
        genericResponse = createListResponseHandler(httpResponse);
        return genericResponse;

    }
 private List<T> createListResponseHandler(String string_response) {
        return gson.fromJson(string_response, new TypeToken<List<T>>() {
        }.getType());
    }

现在问题是我从来没有在T中获得MyClass引用。我在哪里做错了? 。我做了很多谷歌但仍未找到解决方案。

我的问题是如何在T中获取MyClass引用。因为我需要使用gson序列化数据。

我试过了。但仍然没有解决方案

List<MyClass> res = serviceHandler.<MyClass>genericGetAll("https://api.github.com/users/hadley/orgs", MethodTypes.GET.toString(), null);

1 个答案:

答案 0 :(得分:2)

通用类型代币无法正常工作。

您需要将new TypeToken<List<MyClass>>() {}作为构造函数参数传递给ServiceHandler

public class ServiceHandler<T> {
  private final TypeToken<List<T>> typeToken;

  public ServiceHandler(TypeToken<List<T>> typeToken) {
    this.typeToken = typeToken;
  }

  // ...

  private List<T> createListResponseHandler(String string_response) {
    return gson.fromJson(string_response, typeToken.getType());
  }
}

并使用:

实例化
ServiceHandler<MyClass> serviceHandler =
    new ServiceHandler<>(new TypeToken<MyClass>() {});