为什么我可以创建泛型对象而不以任何方式指定其类型以及何时无法推断类型?

时间:2016-05-19 15:54:46

标签: java generics type-inference

(没关系:) 它是非法的:HashSet<> f;

它是合法的:new HashSet<>();

从类型推断文档:

  

您可以替换调用构造函数所需的类型参数   具有一组空类型参数(&lt;&gt;)的泛型类的长度   因为编译器可以从上下文推断类型参数

但是编译器在第二个例子中不能推断出类型参数,为什么要编译?

1 个答案:

答案 0 :(得分:1)

泛型是一个编译时构造。也就是说,它用于强制给定的变量或方法只能使用特定类型或类型集。在您的情况下,编译器可以推断&#34;最广泛的类型 - Object,因为HashSet没有被分配或返回,所以类型永远不会在编译时使用。在运行时,由于type erasure,类型无意义。

相关问题