Java 为什么调用构造函数时不需要泛型类型?

Java 为什么调用构造函数时不需要泛型类型?,java,eclipse,generics,Java,Eclipse,Generics,我了解泛型周围的类型擦除,但我仍然惊讶地发现这段代码没有生成错误: public class MyClass { private final HashMap<ClassA,ClassB> hashMap; public MyClass() { this.hashMap = new HashMap<>(); } } 大多数情况下,我在Java1.6中使用Eclipse的Java标准版本,当我选择自动完成的构造函数名称时,泛型类型是自动填充的。我现在使

我了解泛型周围的类型擦除,但我仍然惊讶地发现这段代码没有生成错误:

public class MyClass {
  private final HashMap<ClassA,ClassB> hashMap;

  public MyClass() {
    this.hashMap = new HashMap<>();
  }
}
大多数情况下,我在Java1.6中使用Eclipse的Java标准版本,当我选择自动完成的构造函数名称时,泛型类型是自动填充的。我现在使用的是Eclipse和Java1.7的J2EE版本,但事实并非如此。代码编译后就可以了。这是完全冗余的信息,所以我不明白为什么需要它。但你不必把它放在心上,这感觉是不对的

为什么这不是必需的,或者我完全遗漏了什么?

实际上,通过键入,你说嘿,编译器,为我完成工作,并按照声明中的说明填写泛型

它被称为Java 7,并且是Java 7的新成员,请参见

如果你写了这个,hashMap=newhashmap;相反,编译器应该抱怨,并且通常会抛出警告。

实际上,通过键入,您会说,嘿,编译器,为我做这项工作,并按照声明中的说明填写泛型

它被称为Java 7,并且是Java 7的新成员,请参见


如果你写了这个,hashMap=newhashmap;相反,编译器应该抱怨并通常抛出警告。

是Java 7中的一个新特性。是Java7中的一个新特性。从阅读另一个SO问题来看,整个要点似乎是触发构造函数参数的编译时泛型类型检查。我们知道类型是什么,所以不必指定它们,但它让编译器知道有需要检查的类型。是的。我们知道类型,但是太懒了,不能在一行中写两次泛型类型。据我所知,戴蒙德的唯一目的是节省我们的时间和易读性!我们会一次又一次地输入同一个东西,当我们可以把它写在这里的时候。从阅读另一个SO问题来看,整个要点似乎是触发构造函数参数的编译时泛型类型检查。我们知道类型是什么,所以不必指定它们,但它让编译器知道有需要检查的类型。是的。我们知道类型,但是太懒了,不能在一行中写两次泛型类型。据我所知,戴蒙德的唯一目的是节省我们的时间和易读性!我们会一次又一次地输入同样的东西,当我们可以把它写在这里的时候。