這是大多數開發人員如何使用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,你需要多少個地方來改變/檢查它可以正常工作每個例子? –