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