为什么我们需要在类中声明一个接口?这样做我们有什么优势吗?

时间:2017-05-07 08:19:17

标签: java android

我在类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);
    }
}

2 个答案:

答案 0 :(得分:3)

如果某个接口A打算由特定的类/接口B使用,那么通过在A内声明B将它们绑定在一起是有意义的。< / p>

另一个这样的例子是在Map.Entry接口内声明的接口Map(例如,你不应该在Map.Entry内使用List

答案 1 :(得分:0)

恕我直言,这是一个非最佳的设计决定。

内部接口有一些有效的用例。例如:在Observable设计模式的实现中,如果Observer和Observable之间存在一对一的对应关系,那么将Observer的接口(监听器)声明为Observable中的内部接口是一种普遍的做法。

您的代码中并非如此。

我不知道ForumService的作用,但我猜它包含一些与论坛管理相关的业务逻辑。如果是这种情况,则根据单一责任原则,ForumServiceForumApi不应在同一类中声明。

我还要说它们不应该在同一个包中定义。所有与网络相关的类应驻留在仅包含网络内容的单独包中。

此外,在这种情况下,界面本身包含实现细节--Retrofit的注释。通过将此界面放在ForumService内,设计有效地使ForumService依赖于Retrofit。这不太重要,但仍然是重构这个界面的有效理由。