Java 为什么新的HashMap<&燃气轮机;在JDK1.6中生成错误,而不是在1.7中生成错误

Java 为什么新的HashMap<&燃气轮机;在JDK1.6中生成错误,而不是在1.7中生成错误,java,generics,Java,Generics,我注意到以下代码在使用java spec 1.7在eclipse中编译时可以工作,但不适用于1.6 HashMap<String, String> hashMap = new HashMap<>(); HashMap HashMap=newhashmap(); 我想要一个解释,但是这种语法以及它为什么适用于1.7。JDK1.6中不允许使用新的HashMap()(称为菱形语法),因为它仅在JavaSE7中引入 在中查找 我想要一个解释,但是这个语法和它为什么适用于1.7

我注意到以下代码在使用java spec 1.7在eclipse中编译时可以工作,但不适用于1.6

HashMap<String, String> hashMap = new HashMap<>();
HashMap HashMap=newhashmap();
我想要一个解释,但是这种语法以及它为什么适用于1.7。

JDK1.6中不允许使用
新的HashMap()
(称为菱形语法),因为它仅在JavaSE7中引入

中查找

我想要一个解释,但是这个语法和它为什么适用于1.7

下面的解释(稍加修改)来自:

JavaSE7之前版本的编译器能够推断泛型构造函数的实际类型参数,类似于泛型方法。但是,如果使用菱形(
),JavaSE7中的编译器可以推断被实例化的泛型类的实际类型参数。考虑下面的示例,它对于java SE 7和以后的有效性:

class-MyClass{
MyClass(T){
// ...
}
}

MyClass myObject=newmyclass(“”);
在本例中,编译器为泛型类
MyClass
的形式类型参数
X
推断出类型
Integer
。它为该泛型类的构造函数的形式类型参数
T
推断类型
String


它使用的是1.7中引入的。

因为它是JDK 1.7(菱形运算符)的增强,在您必须在类和构造函数上指定泛型类型之前
HashMap HashMap=new HashMap()

在Java SE 7中,可以用一组空的类型参数()替换构造函数的参数化类型:

Map myMap=newhashmap();
在Java SE 6中,必须这样做:

Map<String, List<String>> myMap = new HashMap<String, List<String>>();
Map myMap=newhashmap();

您不能使用JDK 1.7中用于JDK 1.6的相同语法

此运算符的意义是什么?它用于类型推断,但同时也告诉编译器“嘿,这不是原始类型”。你可以在我链接到的帖子中看到我的答案。为了减少视觉噪音,没别的了。
MyClass<Integer> myObject = new MyClass<>("");
Map<String, List<String>> myMap = new HashMap<>();
Map<String, List<String>> myMap = new HashMap<String, List<String>>();