Java 10:Java 7的Diamond推理是否可以与本地类型推理一起使用?


问题内容

JEP 286中,我们可以var在JDK
10(18.3)中使用局部类型推断()。JEP指出,可以进行以下编译:

var list = new ArrayList<String>();  // infers ArrayList<String>

我很想知道如果尝试以下操作会发生什么:

var list = new ArrayList<>();

我在第二个片段中提出的内容是否可以编译?如果是这样(我对此表示怀疑),将ArrayListaccept Object作为其通用类型吗?

我会自己尝试,但是我无法使用可以安装早期发行版的任何计算机。

谢谢!


问题答案:

是的,var钻石操作员可以组合在一起。编译器将推断最特定的泛型类型:

var list = new ArrayList<>(); // Infers ArrayList<Object>
var list = new ArrayList<>(List.of(1, 2, 3)); // Infers ArrayList<Integer>

您甚至可以将它们与匿名类结合使用:

var list = new ArrayList<>() {};