返回ArrayList或List?

kin*_*sia 12 java optimization list

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

因为如果用户知道真实类型是一个ArrayList,他将在循环中使用accessor []而不是迭代器,但如果他不知道他将使用迭代器.

对于LinkedList的相同问题,如果返回类型是List,则他将无法使用正确的访问者.

我对吗?

ipa*_*lic 20

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

如果将来您作为库创建者决定更改您的内部实现,那么更改将通过库的通用接口从最终用户隐藏.

  • @BaL你能解释一下用户可以选择实现是什么意思吗?如果库函数返回由 ArrayList 支持的 List,则用户不能选择将其视为 LinkedList,例如,List 将不会响应 getFirst() 或 getLast() (2认同)

Jes*_*run 8

因为您的库的用户永远不会知道您在内部使用ArrayList.

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

这就是编写接口而不是实现的代码总是更好的原因,当您编写专门用于重用的代码时更是如此.接口(在本例中为List)充当代码与客户端代码之间的契约.它告诉他们你的代码做什么(接口),而不告诉他们它是如何做的(通过不暴露实现).


Jam*_* P. 5

如果可能的话,返回一个接口(或者失败的超类?).这样,如果覆盖,该方法可以具有更广泛的应用.这可能会阻止某些特定于类的方法在返回的对象上可用,但是没有什么能阻止程序员获取List数据并将其复制到Collection他们喜欢使用的任何内容.

List myList = new MyLibrary().getList();

ArrayList myArrayList = new ArrayList(myList);
LinkedList myLinkedList = new LinkedList(myList);
Run Code Online (Sandbox Code Playgroud)