我理解有关泛型的类型擦除,但我仍然惊讶地发现此代码不会产生错误:
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版本,但它们不是。代码编译,没关系。这是完全冗余的信息,所以我不明白为什么要这么做。但你不必把它放在一起感觉不对。
为什么这不是必需的,或者我在这里完全遗漏了什么?
答案 0 :(得分:4)
实际上,通过输入<>
,你会说“嘿,编译器,为我做的工作,并填写声明中所述的泛型。”
它被称为diamond operator,是Java 7的新用户,例如this question on SO或official tutorial。
如果您改为编写this.hashMap = new HashMap();
,那么编译器应该抱怨(通常会发出警告)。