2015-07-28 232 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