我尝试通过从基础响应类继承来重用单个改进的api调用。
但是我无法做到。
我会尝试用例子说明自己(这不是一个具体的场景。我只是想弄清楚主要想法):
拥有此响应对象和api服务:
public class UserDetailsResponse
{
private int userId;
}
public class ExtendedUserDetailsResponse extends UserDetailsResponse
{
private int userAdditionalId;
}
interface APIService
{
@GET("/UserDetails/")
Call<UserDetailsResponse> getUserDetails(@Query("id") String userId);
}
有没有办法将getUserDetails api与ExtendedUserDetailsResponse对象一起使用?
这个给了我编译错误:
mService.getUserDetails("123").enqueue(new Callback<ExtendedUserDetailsResponse>()
{
@Override
public void onResponse(Call<ExtendedUserDetailsResponse> call, Response<ExtendedUserDetailsResponse> response)
{
}
@Override
public void onFailure(Call<ExtendedUserDetailsResponse> call, Throwable t)
{
}
});
我该如何解决这个问题?或至少与此类似的东西,不使用特定派生类的新api调用?
谢谢!
答案 0 :(得分:0)
您收到编译错误,因为您使用了错误的回调对象:
只需更改此行:
Call<UserDetailsResponse> getUserDetails(@Query("id") String userId);
到
Call<ExtendedUserDetailsResponse> getUserDetails(@Query("id") String userId);
或者取决于响应更改回调中的对象
请注意,ExtendedUserDetailsResponse
将userId
,因此即使服务器返回ExtendedUserDetailsResponse
或UserDetailsResponse
类型的对象,您也可以使用ExtendedUserDetailsResponse
。
答案 1 :(得分:0)
您收到错误,因为ExtendedUserDetailsResponse是UserDetailsResponse,但UserDetailsResponse不一定是ExtendedUserDetailsResponse。
为了使其成为通用的,请以这种方式签署您的方法
Call< ExtendedUserDetailsResponse > getUserDetails(@Query("id") String userId);
然后,ExtendedUserDetailsResponse可以访问 userId
请记住使用getter和setter公开userId,以便对其进行解析。