我是Java新手。 我想知道的區別: 什麼是Java中的List或ArrayList聲明差異?
ArrayList<String> list = new ArrayList<>();
感謝
List<String> list = new ArrayList<>();
和
ArrayList<String> list = new ArrayList<String>();
和
我是Java新手。 我想知道的區別: 什麼是Java中的List或ArrayList聲明差異?
ArrayList<String> list = new ArrayList<>();
感謝
List<String> list = new ArrayList<>();
和
ArrayList<String> list = new ArrayList<String>();
和
第一種是隻因爲Java 7的有效的,並且是相當於
List<String> list = new ArrayList<String>();
這只是不夠詳細。
相同的第三個,即相當於
ArrayList<String> list = new ArrayList<String>();
,從而嚴格等同於第二個。
你應該更喜歡第一個,在答案中提到的以下問題的原因:List versus ArrayList as reference type?
有兩點此言這裏:
1.新的Java 7的鑽石運營商允許你在不指定類型參數的情況下實例化一個泛型類。所以這兩者是等價的:
ArrayList<String> list = new ArrayList<String>(); ArrayList<String> list = new ArrayList<>();
2,更重要的一點是前兩個實例之間的區別。第二個是明確的:
ArrayList<String> list = new ArrayList<String>();
在第一個:
List<String> list = new ArrayList<>();
您正在使用的事實,ArrayList
是List
一個亞型,因此,分配是有效的。但是,對於新的list
對象,您只有List
中包含的方法的子集(因爲您的對象畢竟被聲明爲List
),但實現中存在ArrayList
。這在面向對象編程中被稱爲多態性,並且允許您使用類的子類型而不是父類,以便提供各種不同的功能。
三人都有點相當於:
List<String> list = new ArrayList<>();
在上面,你宣佈一個實現List
界面將包含String
元素,並與具體類ArrayList
實例化它的變量。另外,您正在使用Java 7的新鑽石語法,子不用再寫之間的<>
。
ArrayList<String> list = new ArrayList<String>();
在上面,你聲明的具體類ArrayList
的一個變量,它包含String
元素,並使用了「傳統」的語法,責成具體類ArrayList
實例化它,你指定String
類型在<>
之間。
ArrayList<String> list = new ArrayList<>();
在上面,你聲明的具體類ArrayList
其中將包含String
元素,並與具體類ArrayList
實例化它的變量。另外,您正在使用Java 7的新鑽石語法,子不用再寫之間的<>
。
請注意,鑽石語法(<>
)僅適用於Java 7及更高版本,對於使用傳統語法(<the-type>
)實例化泛型的Java先前版本。
最後兩種形式完全相同;第一種形式有點不同,因爲您指定list
變量的類型爲List
而不是ArrayList
類型 - 這是首選形式,因爲良好的面向對象的實踐規定您應該使用program to an 'interface', not an 'implementation'。