我需要一些关于泛型的帮助,目标是创建一个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()
关于如何改进并使其发挥作用的任何建议?
答案 0 :(得分:3)
如果可以在那里使用,你应该在OnDataResponse中提供type in in方法或更好的方法:
public <T> void createUser(Class<T> type, OnDataResponse responseListener) { ... }