我应该返回List或ArrayList
我发现自己同意返回一个接口而不是一个具体的类。
原因很简单,我想要松耦合。
但是会有其他影响或权衡吗?
对于像List或ArrayList这样的类型,不应该有任何compilcation,你应该将List promote 代码返回到接口 。
你会发现你的自我限制这样做是因为它来自像CopyOnWriteArrayList这样的并发包 ,你使用的是addIfAbsent这样的方法,它没有在List接口中定义。
因此,如果您返回ArrayList或任何具体实现,您可以使用未在合同中定义的API( List
接口),但是您将被限制从特定实现更改为其他内容(从ArrayList
到LinkedList
),因为每个人使用您的API必须根据您的更改进行更改,我认为太多了。
最好返回适合您界面的最通用类型。
如果有一些原因导致ArrayList本身适用于您要返回的数据,那么您应该使用它。 通常List很好,但如果返回的值本身是无序的,您也可以考虑使用Collection:
这意味着您将无法调用ArrayList的方法,这些方法不是返回对象的List接口方法。
但是如果对象是ArrayList,你可以进行强制转换。
返回具体类的唯一原因可能是调用者需要了解这个具体实现,或者可能是具体实现的其他接口。 例如,在Android中,您经常必须使用ArrayList,因为框架不知道如何正确序列化通用列表接口。