我了解围绕泛型的类型删除,但我仍然惊讶地发现这段代码没有生成错误:
public class MyClass {
private final HashMap<ClassA,ClassB> hashMap;
public MyClass() {
this.hashMap = new HashMap<>();
}
}
大多数情况下,我将 Eclipse 的 Java 标准版本与 Java 1.6 一起使用,并且当我选择自动完成的构造函数名称时,泛型类型会自动填充。我现在使用的是 J2EE 版本的 Eclipse 和 Java 1.7,但它们不是。代码可以编译并且没问题。这是完全多余的信息,所以我不明白为什么需要它。但如果你不必把它放出来,那就感觉不对了。
为什么这不是必需的,或者我在这里完全遗漏了一些东西?
最佳答案
实际上,输入 <>
,你说“嘿,编译器,为我做这些工作并按照声明中的说明填写泛型。”
它的名字是diamond operator对于 Java 7 来说是新的,请参见例如this question on SO或official tutorial .
如果您写 this.hashMap = new HashMap();
相反,编译器应该提示(并且通常会抛出警告)。
关于java - 为什么调用构造函数时不需要泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10645474/