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<>();
我在第二个片段中提出的内容是否可以编译?如果是这样(我对此表示怀疑),将ArrayList
accept 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<>() {};