2012-01-15 106 views

回答

11

第一種是隻因爲Java 7的有效的,並且是相當於

List<String> list = new ArrayList<String>(); 

這只是不夠詳細。

相同的第三個,即相當於

ArrayList<String> list = new ArrayList<String>(); 

,從而嚴格等同於第二個。

你應該更喜歡第一個,在答案中提到的以下問題的原因:List versus ArrayList as reference type?

2

有兩點此言這裏:

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<>(); 

您正在使用的事實,ArrayListList一個亞型,因此,分配是有效的。但是,對於新的list對象,您只有List中包含的方法的子集(因爲您的對象畢竟被聲明爲List),但實現中存在ArrayList。這在面向對象編程中被稱爲多態性,並且允許您使用類的子類型而不是父類,以便提供各種不同的功能。

4

三人都有點相當於:

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'