2017-03-21 55 views
1

我需要一些幫助,泛型函數參數的仿製藥,我們的目標是建立一個的onSuccess/onerror的回調是得到一個對象作爲參數,創建包裹的onSuccess匿名類當對象類型設置/ onError函數。在匿名類實例中設置

接口

public interface OnDataResponse<T> { 
    void onSuccess(T response); 
    void onError(String data, ResponseError error); 
} 

創建該監聽器,設置的onSuccess的參數類型的呼叫是CreateUserResponse

createUser(new Operation.OnDataResponse<CreateUserResponse>() { 
    @Override 
    public void onSuccess(CreateUserResponse response) { 

    } 

    @Override 
    public void onError(String data, ResponseError error) { 
    } 
};) 

執行的createUser()的

public void createUser(OnDataResponse responseListener) { 

      //performing the task asynchronously 
      String data 
      // if successfull, create an object of type T 
      //(CreateUserResponse in this case) 
      // try to parse data from json to object 
      //create instance of T 
      T tInstance = new Gson().fromJson(data, type); 

      // call the listener, providing the expected object 
      responseListener.onSuccess(tInstance) 
} 

T是未定義的側createUser()

如何改進,使其工作有什麼suggesstions?

+0

具有以下簽名嘗試:'公共無效的createUser(OnDataResponse responseListener,類型)'。 – sp00m

回答

3

你應該OnDataResponse提供方法或類型可能會更好,如果它可以在那裏使用:

public <T> void createUser(Class<T> type, OnDataResponse responseListener) { ... } 
+0

我如何可以提供從withing onDataResponse類型?我試圖使它成爲一個抽象類有實現的函數,返回T的類型,但我怎麼返回T的類型? – aviran

+0

它傳遞給它的構造?有沒有辦法在運行時獲得T的類型? – aviran

+0

在界面中,您可以返回例如類的getType(),這樣以後你將只運行牛逼tInstance =新GSON()fromJson(數據,responseListener.getType())。工廠將在聽衆 – Emilia