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

时间:2012-05-18 01:05:21

标签: java eclipse generics

我理解有关泛型的类型擦除,但我仍然惊讶地发现此代码不会产生错误:

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

  public MyClass() {
    this.hashMap = new HashMap<>();
  }
}

大多数情况下,我将Java标准版本的Eclipse与Java 1.6一起使用,当我选择自动完成的构造函数名称时,泛型类型会自动填充。我现在正在使用J2EE和Java 1.7的J2EE版本,但它们不是。代码编译,没关系。这是完全冗余的信息,所以我不明白为什么要这么做。但你不必把它放在一起感觉不对。

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

1 个答案:

答案 0 :(得分:4)

实际上,通过输入<>,你会说“嘿,编译器,为我做的工作,并填写声明中所述的泛型。”

它被称为diamond operator,是Java 7的新用户,例如this question on SOofficial tutorial

如果您改为编写this.hashMap = new HashMap();,那么编译器应该抱怨(通常会发出警告)。