这是大多数开发人员如何使用ArrayList
(包括我自己),并且是多态的一般原则。您应该使用类层次结构中的最高类/接口,但仍可以使用所有功能。
一般情况下,这使得代码更灵活,并且可以更容易地切换出来实现,因为你知道有List
该节目的类型没有必然您使用只在ArrayList
和不可用任何方法,比如说,一个LinkedList
。
例如,如果我这样做:
LinkedList<String> strings = new LinkedList<String>();
String s = strings.pop();
pop
是独家LinkedList
,所以我不能只是直接将其更改为一个ArrayList
。我不得不也更改我的代码:
ArrayList<String> strings = new ArrayList<String>();
String s = strings.remove(strings.size() - 1);
但如果我刚刚使用的接口,我从来没有在第一时间使用pop
,所以我可能已经只是改变strings
到任何实现我通缉。
编程API时,这一点尤为重要。如果你的方法是可公开访问的并且会被其他开发者使用,那么你需要确保你没有限制你的方法采用的是什么类型的列表,除非你有足够的理由这样做,特别是因为他们可能有的好理由不是想使用ArrayList
。
如果你除了迭代和增加/删除什么都不做,你甚至可以高达Collection
。虽然这里你开始丢失上下文,因为List
告诉你它可能包含重复项并且是手动排序的。但是,如果这不是特别重要,并且您可以使用Collection
,则甚至可以用Set
的实现替换列表。
可能重复[List与ArrayList作为引用类型?](http://stackoverflow.com/questions/4062982/list-versus-arraylist-as-reference-type),[什么是列表与ArrayList ?](http://stackoverflow.com/questions/6867484),[Java List vs ArrayList](http://stackoverflow.com/questions/9309093),[List vs ArrayList](http://stackoverflow.com/问题/ 7726361)和[返回ArrayList或列表?](http://stackoverflow.com/questions/11683044) –
如果你想用另一个列表替换ArrayList,你需要多少个地方来改变/检查它可以正常工作每个例子? –