簡體   English   中英

在通用方法java中傳遞類類型

[英]Pass the class type in generic method java

一個定義了TestJsonData的Interface類。

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

接口類的實現方法

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);
    }

}

再次使用定義方法為genericGetAll的接口類

public interface IServiceHandler
{

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

接口類的實現方法

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());
    }
  }

如果我在gson.fromJson(string_response, new TypeToken<List<MyClass>>() 。中對gson.fromJson(string_response, new TypeToken<List<MyClass>>()進行硬編碼,則無需硬編碼就可以得到類類型,響應就像在圖像中看到的那樣。

下面的代碼調用方法TestJsonData()。我已經添加了隱式類型,但仍然找不到解決方案

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

下圖顯示了沒有硬代碼Myclass的響應值。

沒有硬編碼

下圖顯示了帶有硬代碼Myclass的響應值。

具有硬編碼值

如果省略顯式設置類型參數,並且編譯器無法推斷出該參數,則默認為Object

為了明確設置它,您應該執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM