可能重複:
List versus ArrayList as reference type?在Java中創建一個ArrayList?
什麼在建立在以下幾個方面一個ArrayList的區別?
List listA = new ArrayList(); and ArrayList alist = new ArrayList();
可能重複:
List versus ArrayList as reference type?在Java中創建一個ArrayList?
什麼在建立在以下幾個方面一個ArrayList的區別?
List listA = new ArrayList(); and ArrayList alist = new ArrayList();
在第一種情況下,你使用listA
隱藏列表的執行代碼。
這通常建議,因爲它(幾乎),確保您以後可以更改爲另一種類型的列表,而不必依賴檢查代碼中的其他部分:使用listA
代碼不使用任何具體到ArrayList
類,但只在List
接口中定義了什麼。
第一個將列表分配給由其接口接口定義的變量,第二個按類定義變量。
第一個聲明將讓你以後改變實現:
List listA = new LinkedList();
是有效的,而第二個不會讓你改變實現:
ArrayList listA = new LinkedList(); // <<<=== INVALID
值得注意的是開始Java 5 List
是一種通用類型,因此您應指定類型參數以提高類型安全性:
List<ClassA> listA = new ArrayList<ClassA>();
據目前所討論的問題:)
你應該使用接口,而不是具體的類,因爲你可以很容易地在任何時候更改執行
你應該只使用混凝土類時要訪問特定功能
這是一樣的,只是參考類型不同而已。
在引用對象時,應該總是使用接口(如List)而不是像ArrayList這樣的具體實現。