Java 中的 “new Foo(){}” vs. “new Foo()”

2022-09-03 17:04:31

例如:

Object o1 = new ArrayList<String>();
Object o2 = new ArrayList<String>(){};
Object o3 = new ArrayList<String>(){{}};

有什么区别?

我无法谷歌出Java的第2/3语法,任何参考?


答案 1

第一个创建数组列表

第二个创建ArrayList的匿名子类,该子类具有特定的字符串泛型类型

第三个是相同的,但它有一个空的初始值设定项块。

注意:在可能的情况下,您应该编写最简单,最清晰的代码,特别是如果您正在考虑性能。


答案 2
Object o1 = new ArrayList<String>();

创建数组列表。

Object o2 = new ArrayList<String>(){};

在这里,您将创建一个匿名类,该类可以扩展并且不重写任何内容。所以不同之处在于,你正在子类化一个ArrayList而没有过度的行为,如果你没有充分的理由,永远不要这样做ArrayList<String>

Object o3 = new ArrayList<String>(){{}};

您正在创建与 2 相同但具有空初始化程序块的。


推荐