为什么新的HashMap 在JDK 1.6中产生错误而不是1.7
我注意到以下代码在使用java spec 1.7在eclipse中编译时有效,但不适用于1.6。
HashMap hashMap = new HashMap();
我想要一个解释但是这个语法以及为什么它适用于1.7。
JDK 1.6中不允许使用new HashMap<>()
(称为菱形语法),因为它仅在Java SE 7中引入。
在Java SE 7中查找技术更改重点中的 通用实例创建类型推断 。
我想要一个解释但是这个语法以及为什么它适用于1.7。
以下是来自Oracle本身的解释(略微改编):
Java SE 7之前版本的编译器能够推断通用构造函数的实际类型参数,类似于generics方法。 但是, 如果使用菱形(
<>
) ,Java SE 7中的编译器可以推断正在实例化的generics类的实际类型参数。 请考虑以下示例,该示例对Java SE 7及更高版本有效:
class MyClass { MyClass(T t) { // ... } }
MyClass myObject = new MyClass<>("");
在此示例中,编译器为通用类
MyClass
的forms类型参数X
推断类型Integer
。 它推断出此generics类的构造函数的forms类型参数T
的类型String
。
在Java SE 7中,您可以使用一组空的类型参数(<>)替换构造函数的参数化类型:
Map> myMap = new HashMap<>();
在Java SE 6中,它必须以这种方式完成:
Map> myMap = new HashMap>();
更多细节…
因为它是JDK 1.7(Diamond运算符)的增强,所以必须在类和构造函数HashMap
上指定generics类型HashMap
它使用的是1.7中引入的钻石操作员 。
您不能使用在JDK 1.7中使用的相同语法对于JDK 1.6