前言

在刷题的时候看到有人写代码用了{{}}写法,以前没有见过,特此记录。

1
Queue<TreeNode> queue = new LinkedList<>() {{ add(root); }};

简单介绍

举例

{{}}这种方法是对一个集合进行初始化操作,避免了对集合初始化进行一条一条的add。

1
2
3
4
5
6
7
8
9
10
11
ArrayList<String> list = new ArrayList<String>(){
{
add("A");
add("B");
add("C");
}};
// 和下面功能实现一样
// ArrayList<String> list = new ArrayList<String>();
// list.add("a");
// list.add("b");
// list.add("c");

理解

第一个括号

1
2
3
4
//定义了一个继承于ArrayList的类,它没有名字
new ArrayList<String>(){
//在这里对这个类进行具体定义
};

这里的括号表示对一个类进行具体的定义。

第二个括号

1
2
3
4
5
6

new ArrayList<String>(){
{
//这里是实例初始化块,可以直接调用父类的非私有方法或访问非私有成员
}
};

这里的括号表示实例初始化块(Instance Initialiazer Block),也被称为非静态初始化块。

类比于静态初始块

1
2
3
static{
//静态初始块
}

参考

https://www.cnblogs.com/dengyungao/p/7524981.html