Java中的双括号初始化是什么?

395

Java中的双括号初始化语法({{ ... }})是什么?


2
请见 https://dev59.com/IXM_5IYBdhLWcg3wdy1g#1372124 - skaffman
2
另请参阅https://dev59.com/pnNA5IYBdhLWcg3wh-YC - Jim Ferrans
13
双括号初始化是一个非常危险的特性,应该谨慎使用。它可能会破坏等式契约并引入棘手的内存泄漏问题。这篇文章详细描述了相关信息。 - Andrii Polunin
Andrii发布的链接已经失效,但我自己写了一篇关于它的博客文章:不要使用双括号初始化技巧 - Jesper
13个回答

3
你是指像这样的东西吗?
List<String> blah = new ArrayList<String>(){{add("asdfa");add("bbb");}};

在创建时进行数组列表初始化(hack)

1
第一个大括号创建了一个新的匿名类,第二组大括号创建了一个实例初始化器,就像静态块一样。
正如其他人指出的那样,这种方法并不安全。
然而,您始终可以使用此替代方法来初始化集合。
  • Java 8
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
  • Java 9
List<String> list = List.of("A", "B", "C");

-3

这似乎与Flash和VBScript中广受欢迎的with关键字相同。它是一种改变this的方法,仅此而已。


1
不完全是这样。这就像说创建一个新类是改变this的方法一样。语法只是创建一个匿名类(因此对this的任何引用都将引用该新匿名类的对象),然后使用初始化块{...}来初始化新创建的实例。 - grinch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接