我在类ForumService中有一个InterfaceApi接口。我在这里使用Retrofit和Rxjava。通常对于Retrofit,我们实现了一个接口,但是在下面的代码中我看到了类里面的接口。这有什么具体的原因吗?
public class ForumService {
public interface ForumApi {
@GET("/posts")
public Observable<List<Post>>
getPosts();
@GET("/posts/{id}")
public Observable<Post>
getPost(@Path("id") int postId);
@GET("/comments")
public Observable<List<Comment>>
getComments(@Query("postId") int postId);
@POST("/posts")
public Observable<Post>
postPost(Post post);
}
}
答案 0 :(得分:3)
如果某个接口A
打算由特定的类/接口B
使用,那么通过在A
内声明B
将它们绑定在一起是有意义的。< / p>
另一个这样的例子是在Map.Entry
接口内声明的接口Map
(例如,你不应该在Map.Entry
内使用List
。
答案 1 :(得分:0)
内部接口有一些有效的用例。例如:在Observable设计模式的实现中,如果Observer和Observable之间存在一对一的对应关系,那么将Observer的接口(监听器)声明为Observable中的内部接口是一种普遍的做法。
您的代码中并非如此。
我不知道ForumService
的作用,但我猜它包含一些与论坛管理相关的业务逻辑。如果是这种情况,则根据单一责任原则,ForumService
和ForumApi
不应在同一类中声明。
我还要说它们不应该在同一个包中定义。所有与网络相关的类应驻留在仅包含网络内容的单独包中。
此外,在这种情况下,界面本身包含实现细节--Retrofit的注释。通过将此界面放在ForumService
内,设计有效地使ForumService
依赖于Retrofit。这不太重要,但仍然是重构这个界面的有效理由。