这是调用通用类方法的方法。
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);
最佳答案
通用类型令牌无效。
您需要将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>() {});
关于java - 类类型引用未在Java通用类或方法中传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35623267/