我应该返回List还是ArrayList

时间:2012-04-26 07:02:40

标签: java interface

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

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

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

4 个答案:

答案 0 :(得分:16)

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

如果有一些原因导致ArrayList本身适用于您要返回的数据,那么您应该使用它。通常List很好,但如果返回的值本身是无序的,您也可以考虑使用Collection:

Diagram of Java collections hierarchy

答案 1 :(得分:5)

对于像List或ArrayList这样的类型,不应该进行任何编译,你应该返回List Code to an interface

如果你来自像CopyOnWriteArrayList这样的并发软件包,你会发现你的自我限制,并且你使用的是addIfAbsent之类的方法,这些方法没有在List接口中定义。

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

答案 2 :(得分:4)

含义是您无法调用ArrayList的方法,这些方法不是返回对象的List接口方法。

但是如果对象是一个ArrayList,你可以进行强制转换。

答案 3 :(得分:4)

返回具体类的唯一原因可能是调用者需要了解这个具体实现,或者可能是具体实现的其他接口。例如,在Android中,您经常必须使用ArrayList,因为框架不知道如何正确序列化通用列表接口。

相关问题