与非泛型实现泛型类型
最近我遇到了这样的代码与非泛型实现泛型类型
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月开始提供。 –