我发现自己同意返回一个接口而不是一个具体的类。
原因很简单,我想要松耦合。
但是会有其他影响或权衡吗?
最好返回适合您的界面的最通用类型。
如果有某种原因ArrayList
本质上适合您返回的数据,那么您应该使用它。通常很好,但如果返回的值本质上是无序的List
,您也可以考虑使用:Collection
对于像 List 或 ArrayList 这样的类型,不应该有任何复杂性,您应该将 List 提升代码返回到 interface。
你会发现自己这样做受到限制,如果这是来自像CopyOnWriteArrayList这样的 Concurrency 包,并且你正在使用像addIfAbsent这样的方法,它没有在 List 接口中定义。
因此,如果您返回 ArrayList 或任何具体实现,您可以使用未在合同(List
接口)中定义的 API,但是您在从特定实现更改为其他内容(从ArrayList
到LinkedList
)时受到限制,因为每个人都在使用您的 API 必须根据您的更改进行更改。我认为期望太高了。
这意味着您将无法为返回的对象调用ArrayList
不是接口方法的方法。List
但是,如果对象是一个ArrayList
你可以做一个演员。
返回具体类的唯一原因可能是调用者需要知道这个具体实现,或者可能是具体实现上的附加接口。例如,在Android中,你经常不得不使用ArrayList
,因为框架不知道如何正确序列化泛型List
接口。