Search code examples
androidinheritanceretrofit

java.lang.IllegalArgumentException: API interfaces must not extend other interfaces Retrofit 2


I am having the next problem using Retrofit 2 beta 2:

java.lang.IllegalArgumentException: API interfaces must not extend other interfaces.

This is because I have one interface for the API of Retrofit like this:

public interface RetrofitBaseAPI {

    @POST
    Call<LoginResp> login(@Url String url, @Body LoginReq loginReq);

    @POST
    Call<String> logout(@Url String url, @Header("Cookie") String sid);
}

For example, one of them is this one:

public interface RetrofitWiserLinkAPI extends RetrofitBaseAPI {

    @GET("/rs/DeviceIdentification")
    Call<DeviceId> getDeviceIdentification(@Header("Cookie") String sid);
}

And then, I have three other interfaces, the three of them extends from this RetrofitBaseAPI interface.

When I try to call the retrofit.create(Class class) with the given interface, I always receive this error.

As far as I was reading, the only solution is to create three independents interfaces. Is it true? Anybody knows another solution?

I find a little bit weird that we need to duplicate code, but well, maybe there is a reason I don't understand.....

Thanks in advance!

Thanks,

EDIT: Same problem using the final Retrofit 2 release version. I guess it is a limitation from Retrofit....


Solution

  • It's not possible to have a base Retrofit interface.

    JakeWharton - the author of Retrofit:

    Retrofit favors composition over inheritance. One interface per service.

    So as you already found out, the only solution is to create three independents interfaces.