12

我发现自己同意返回一个接口而不是一个具体的类。

原因很简单,我想要松耦合。

但是会有其他影响或权衡吗?

4

4 回答 4

22

最好返回适合您的界面的最通用类型。

如果有某种原因ArrayList本质上适合您返回的数据,那么您应该使用它。通常很好,但如果返回的值本质上是无序的List,您也可以考虑使用:Collection

Java 集合层次结构图

于 2012-04-26T07:10:58.803 回答
6

对于像 List 或 ArrayList 这样的类型,不应该有任何复杂性,您应该将 List 提升代码返回到 interface

你会发现自己这样做受到限制,如果这是来自像CopyOnWriteArrayList这样的 Concurrency 包,并且你正在使用像addIfAbsent这样的方法,它没有在 List 接口中定义。

因此,如果您返回 ArrayList 或任何具体实现,您可以使用未在合同(List接口)中定义的 API,但是您在从特定实现更改为其他内容(从ArrayListLinkedList)时受到限制,因为每个人都在使用您的 API 必须根据您的更改进行更改。我认为期望太高了。

于 2012-04-26T07:07:24.023 回答
4

这意味着您将无法为返回的对象调用ArrayList不是接口方法的方法。List

但是,如果对象是一个ArrayList你可以做一个演员。

于 2012-04-26T07:06:49.493 回答
4

返回具体类的唯一原因可能是调用者需要知道这个具体实现,或者可能是具体实现上的附加接口。例如,在Android中,你经常不得不使用ArrayList,因为框架不知道如何正确序列化泛型List接口。

于 2012-04-26T07:08:58.330 回答