来自 JEP 286 ,我们看到我们将能够在 JDK 10 (18.3) 中利用本地类型推断 (var
)。 JEP 声明以下编译,这是预期的:
var list = new ArrayList<String>(); // infers ArrayList<String>
我很想知道如果我们尝试以下操作会发生什么:
var list = new ArrayList<>();
我在第二个片段中提出的建议甚至可以编译吗?如果是这样(我怀疑),ArrayList
会接受 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<>() {};
关于Java 10 : Will Java 7's Diamond Inference Work with Local Type Inference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48428434/