返回数组列表还是列表?

2022-09-04 05:43:20

我正在创建一个供人们使用的库,但是为什么我的方法应该返回List而不是ArrayList

因为如果用户知道真正的类型是ArrayList,他将在循环中使用访问器[]而不是迭代器,但如果他不知道他将使用迭代器。

LinkedList的问题相同,如果返回类型是List,他将无法使用正确的访问器。

我说的对吗?


答案 1

返回 List 将使库的用户能够使用实现 List 接口的任何内容,而使用 ArrayList 将强制他们使用 ArrayList

如果将来,您作为库创建者决定更改内部实现,则该更改将通过库的通用接口对最终用户隐藏。


答案 2

因为库的用户永远不应该知道您正在内部使用 ArrayList。

例如,假设您返回一个 ArrayList,很多人已经开始使用您的库。现在,如果你突然意识到LinkedList更适合你的目的,那么你就破坏了所有目前正在使用你的代码的人的兼容性。

这就是为什么最好将代码编码到接口而不是实现,当您编写专门用于重用的代码时更是如此。接口(在本例中为 List)充当代码和客户端代码之间的协定。它告诉他们你的代码做了什么(接口),而不告诉他们它是如何做到的(通过不公开实现)。


推荐