我应该返回List或ArrayList

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

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

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

对于像List或ArrayList这样的类型,不应该有任何compilcation,你应该将List promote 代码返回到接口 。

你会发现你的自我限制这样做是因为它来自像CopyOnWriteArrayList这样的并发包 ,你使用的是addIfAbsent这样的方法,它没有在List接口中定义。

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

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

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

Java集合层次结构图

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

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

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