【问题标题】:java.lang.IllegalArgumentException: API interfaces must not extend other interfaces Retrofit 2java.lang.IllegalArgumentException:API 接口不得扩展其他接口 Retrofit 2
【发布时间】: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


【解决方案1】:

不可能有一个基本的 Retrofit 接口。

JakeWharton——Retrofit 的作者:

改造有利于组合而不是继承。每个服务一个接口。

正如您已经发现的那样,唯一的解决方案是创建三个独立的接口。

【讨论】:

  • 真可怜:-/
猜你喜欢
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2015-08-09
  • 2018-11-28
  • 2020-09-07
相关资源
最近更新 更多