java - 在泛型方法java中传递类类型

标签 java android generics

具有 TestJsonData 定义的接口(interface)类。

  public interface ICasAuthentication {
        <T> List<T> TestJsonData();
    }

接口(interface)类的实现方法

public class CasAuthentication implements ICasAuthentication {
    private IServiceHandler _iServiceHandler = null;
    public CasAuthentication(ServiceHandler ServiceHandler) {
        this._iServiceHandler = ServiceHandler;
    }

    public <T>List<T> TestJsonData() {
        List<T> response = null;
        return response = _iServiceHandler.<T>genericGetAll("https://api.github.com/users/hadley/orgs", MethodTypes.GET.toString(), null);
    }

}

又是一个接口(interface)类,其定义方法为 genericGetAll

public interface IServiceHandler
{

    <T>List<T> genericGetAll(String destinationUrl, String method, HashMap<String, String> params);
}

接口(interface)类的实现方法

public class ServiceHandler implements IServiceHandler {
    public String response = null;
    private static Gson gson = new Gson();
    public ServiceHandler() {

    }

通用响应不是 MyClass 类型。仍然无法引用类类型。 T 类型仍然没有引用 Myclass 类型

 public <T> 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 <T> List<T> createListResponseHandler(String string_response) {
        return gson.fromJson(string_response, new TypeToken<List<T>>() {
        }.getType());
    }
  }

如果我将 MyClass 硬编码在 gson.fromJson(string_response, new TypeToken<List<MyClass>>() 中。我无需硬编码即可获取类类型,响应就像您在图片中看到的那样。

下面的代码正在调用方法TestJsonData()。我已经添加了隐式类型,但仍然无法找到解决方案

List<MyClass> res = _iCasAuthentication.<MyClass>TestJsonData();

下图显示了没有硬编码 Myclass 的响应值。

without hard code

下图显示了硬编码 Myclass 的响应值。

with hardcode value

最佳答案

如果您省略显式设置类型参数并且编译器无法推断它,则它将默认为 Object

为了显式设置它,您应该这样做:

List<MyClass> res = callingMethod.<MyClass>createListResponseHandler("");

关于java - 在泛型方法java中传递类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35602098/

相关文章:

java - Java 中清理线程/后台线程或进程/服务

java - 如何在任何字节代码库中创建具有最终静态字段的类?

java - Jackson JsonTypeInfo 用于 HashMap<String, Object> 的内容

java - 这个instanceof条件应该是什么样的?

java - 不同的应用程序签名问题android?

android - 无法运行 Flutter 入门。在根项目 'app' 中找不到项目 'myapp'

java - 在到达服务器之前分析http Rest请求

java - 将未知类型泛型列表转换为数组

Java 泛型 - 两个类型参数之间的关系

c# - 在 C# 中一般访问多维数组