改造,通用调用类型

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,因为它很容易改变。