最近我遇到了這樣的代碼與非泛型實現泛型類型
List<Person> somevar = new ArrayList<>();
我不明白怎麼廣義聲明類型列表可以與非廣義構造的ArrayList <被實例化>;
很明顯,代碼工作正常,但要深入挖掘,爲什麼和如何。
謝謝
最近我遇到了這樣的代碼與非泛型實現泛型類型
List<Person> somevar = new ArrayList<>();
我不明白怎麼廣義聲明類型列表可以與非廣義構造的ArrayList <被實例化>;
很明顯,代碼工作正常,但要深入挖掘,爲什麼和如何。
謝謝
這只是一個語法糖來編寫更少的代碼。這相當於:
List<Person> somevar = new ArrayList<Person>();
new ArrayList<>;
不是有效的語法。 有效的語法是new ArrayList<>();
,它被稱爲「菱形符號」。它不是非泛型的:編譯器會從上下文中推導出類型。
非通用將new ArrayList();
這只是錯字,你是對的,我忘了附加構造函數括號。 –
但是等等..什麼意思是「comiler會演繹」? 所以如果我有一個通用的接口類型
它由@JozefChocolacek給出的鏈接解釋http://docs.oracle.com/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html – dotvav
它被稱爲「鑽石經營者」。您不必添加類型參數的原因是因爲您正在分配它的左側變量是推斷出。
它與通用方法類似。類型推斷是對這些已經使用的Java 7之前:
這似乎是它的好文章: http://www.javaworld.com/article/2074080/core-java/jdk-7--the-diamond-operator.html
我只是指出http://docs.oracle.com添加我的兩分錢/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html - 它是Java7語言增強功能的一部分,自2011年7月開始提供。 –