0

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

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

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

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

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

4

1 回答 1

4

实际上,通过键入<>,您会说“嘿,编译器,为我完成工作并按照声明中的说明填写泛型。”

它被称为钻石运算符,是 Java 7 的新手,请参阅SO 上的这个问题官方教程

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

于 2012-05-18T01:08:15.257 回答