改造,通用调用类型
Retrofit, Generic Call type
如果我的标题含糊不清但我找不到更好的标题,我很抱歉。
我休息 Api 以这种方式公开服务:/api/{type}/{id}
4 'type' 因此返回 4 Class 类型。
所有这些 Classes 都来自同一个 SuperClass
我的问题是我似乎总是必须明确命名返回的 class :
Call<Type1> call = apiInterface.get....
Call<Type2> call = apiInterface.get....
等...
所以现在我
SuperClass object = null;
switch(type){
case TYPE1:
Call<Type1> call = apiInterface.getType1(id);
call.enqueue(new Callback....{
.......
object = response.body()
}
break;
case TYPE2:
Call<Type2> call = apiInterface.getType2(id);
call.enqueue(new Callback....{
.......
object = response.body()
}
break;
}
感觉很不对。
你有办法做得更好吗,也许是泛型?
谢谢,
我最后做的是为我的 Api Class 中的所有子类创建一个包装器:
public Call getCourseElement(Type type, String id){
Call call = null;
switch (type) {
case TYPE1:
call = apiInterface.getType1(id);
break;
case TYPE2:
call = apiInterface.getType2(id);
break;
...
}
return call;
}
并这样使用它:
Call call = api.getCourseElement(type, id);
call.enqueue(new Callback() {
@Override
public void onResponse(Response response, Retrofit retrofit) {
SuperClass superObj = (SuperClass) response.body()
...........
}
@Override
public void onFailure(Throwable t) {
..........
}
});
我有一些未经检查的警告想法,我还有开关。
我考虑过的另一个解决方案是使用自定义 TypeConverter,它将(从 json 响应)创建一个 TYPE1/TYPE2 元素并将其发送回 SuperClass 目的。但我不想测试 json,因为它很容易改变。
如果我的标题含糊不清但我找不到更好的标题,我很抱歉。
我休息 Api 以这种方式公开服务:/api/{type}/{id}
4 'type' 因此返回 4 Class 类型。
所有这些 Classes 都来自同一个 SuperClass
我的问题是我似乎总是必须明确命名返回的 class :
Call<Type1> call = apiInterface.get....
Call<Type2> call = apiInterface.get....
等...
所以现在我
SuperClass object = null;
switch(type){
case TYPE1:
Call<Type1> call = apiInterface.getType1(id);
call.enqueue(new Callback....{
.......
object = response.body()
}
break;
case TYPE2:
Call<Type2> call = apiInterface.getType2(id);
call.enqueue(new Callback....{
.......
object = response.body()
}
break;
}
感觉很不对。
你有办法做得更好吗,也许是泛型?
谢谢,
我最后做的是为我的 Api Class 中的所有子类创建一个包装器:
public Call getCourseElement(Type type, String id){
Call call = null;
switch (type) {
case TYPE1:
call = apiInterface.getType1(id);
break;
case TYPE2:
call = apiInterface.getType2(id);
break;
...
}
return call;
}
并这样使用它:
Call call = api.getCourseElement(type, id);
call.enqueue(new Callback() {
@Override
public void onResponse(Response response, Retrofit retrofit) {
SuperClass superObj = (SuperClass) response.body()
...........
}
@Override
public void onFailure(Throwable t) {
..........
}
});
我有一些未经检查的警告想法,我还有开关。
我考虑过的另一个解决方案是使用自定义 TypeConverter,它将(从 json 响应)创建一个 TYPE1/TYPE2 元素并将其发送回 SuperClass 目的。但我不想测试 json,因为它很容易改变。