2015-07-28 225 views
2

最近我遇到了這樣的代碼與非泛型實現泛型類型

List<Person> somevar = new ArrayList<>(); 

我不明白怎麼廣義聲明類型列表可以與非廣義構造的ArrayList <被實例化>;

很明顯,代碼工作正常,但要深入挖掘,爲什麼和如何。

謝謝

回答

3

這只是一個語法糖來編寫更少的代碼。這相當於:

List<Person> somevar = new ArrayList<Person>(); 
+2

我只是指出http://docs.oracle.com添加我的兩分錢/javase/7/docs/technotes/guides/language/type-in​​ference-generic-instance-creation.html - 它是Java7語言增強功能的一部分,自2011年7月開始提供。 –

0

new ArrayList<>;不是有效的語法。 有效的語法是new ArrayList<>();,它被稱爲「菱形符號」。它不是非泛型的:編譯器會從上下文中推導出類型。

非通用將new ArrayList();

+0

這只是錯字,你是對的,我忘了附加構造函數括號。 –

+0

但是等等..什麼意思是「comiler會演繹」? 所以如果我有一個通用的接口類型,我可以創建幾個實現對象,爲什麼然後編譯器不做扣減?,事情不是「糖」或發生了什麼..我知道它的工作..但爲什麼?你顯式聲明類型爲Person對象的接口泛化,並且ArrayList <>()對象肯定不會實現該接口。 我知道它的工作..只是無法理解 - 爲什麼。 –

+0

它由@JozefChocolacek給出的鏈接解釋http://docs.oracle.com/javase/7/docs/technotes/guides/language/type-in​​ference-generic-instance-creation.html – dotvav