如何创建实现通用接口的全局泛型类?

时间:2017-11-22 08:44:44

标签: java android generics retrofit2

说实话,我需要为多个班级使用Retofit Callback。我不想在每个UI页面中使用onResponse和onFailour方法编写回调接口。

所以我决定编写一个实现Retrofit Callback接口的全局类。

但我的问题是,我想把它变成Generic,因为有很多不同的ResponseParser类会使用这个全局类。

我尝试过如下,但面临一点问题。

public class WebAPIControler implements Callback<TResponse>{

@Override
public void onResponse(Call<TResponse> call, Response<TResponse> response) {

}

@Override
public void onFailure(Call<TResponse> call, Throwable t) {

}
}

这里编译器无法找到 TResponse 类。这里TResponse是一个泛型类,我想处理所有的ResponseParser类之王。所以我给它命名为T或TResponse。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

您必须首先将您的类作为泛型类,然后实现通用接口。

public class WebAPIControler implements Callback<T>{

@Override
public void onResponse(Call<T> call, Response<T> response) {

}

@Override
public void onFailure(Call<T> call, Throwable t) {

}
}
  

什么是T?

E - Element (used extensively by the Java Collections Framework)
K - Key
N - Number
T - Type
V - Value
S,U,V etc. - 2nd, 3rd, 4th types

Source

我建议您只实现通用接口,您的类不需要是通用的。

<强>更新

a.create Interface

interface CustomSubscriber<T>  {
void test(T object);
}

b。使用任何对象实现您的界面

public class WebAPIControler implements CustomSubscriber<JsonObject>{

@Override
public void test(JsonObject object) {

}
}

答案 1 :(得分:0)

正如其他人所评论的那样,您所缺少的是public class WebAPIControler<T>中的通用类型声明。这就是编译器抱怨T不存在的原因。

public class WebAPIControler<T> implements Callback<T> {
    @Override
    public void onResponse(Call<T> call, Response<T> response) {

    }

    @Override
    public void onFailure(Call<T> call, Throwable t) {

    }
}