【发布时间】:2015-12-09 14:25:27
【问题描述】:
我在使用 Retrofit 2 beta 2 时遇到了下一个问题:
java.lang.IllegalArgumentException: API interfaces must not extend other interfaces.
这是因为我有一个 Retrofit 的 API 接口,如下所示:
public interface RetrofitBaseAPI {
@POST
Call<LoginResp> login(@Url String url, @Body LoginReq loginReq);
@POST
Call<String> logout(@Url String url, @Header("Cookie") String sid);
}
例如,其中之一就是这个:
public interface RetrofitWiserLinkAPI extends RetrofitBaseAPI {
@GET("/rs/DeviceIdentification")
Call<DeviceId> getDeviceIdentification(@Header("Cookie") String sid);
}
然后,我还有另外三个接口,它们三个都是从这个 RetrofitBaseAPI 接口扩展而来的。
当我尝试使用给定接口调用 retrofit.create(Class class) 时,我总是收到此错误。
据我阅读,唯一的解决方案是创建三个独立的接口。这是真的吗?有人知道另一种解决方案吗?
我觉得我们需要复制代码有点奇怪,但是好吧,也许有一个我不明白的原因.....
提前致谢!
谢谢,
编辑:使用最终的 Retrofit 2 发行版时同样的问题。我想这是 Retrofit 的限制....
【问题讨论】:
-
不,这是不可能的。你可以阅读更多here
-
非常感谢您的回答!并且限制是出于性能,设计等任何特定原因???还是只是为了减少可能的用例?
-
@zapotec “改造有利于组合。这个 PR 增加了继承。”有人说……
-
我遇到了同样的问题。在不创建三个独立接口的情况下,你想通了吗?
-
收到解决方案后,您只需将答案标记为已接受,无需更改问题标题。详情见stackoverflow.com/help/someone-answers
标签: android inheritance retrofit