函数参数泛型在匿名类实例中设置

时间:2017-03-21 13:30:52

标签: java generics

我需要一些关于泛型的帮助,目标是创建一个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)
}

createUser()

中未定义T

关于如何改进并使其发挥作用的任何建议?

1 个答案:

答案 0 :(得分:3)

如果可以在那里使用,你应该在OnDataResponse中提供type in in方法或更好的方法:

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