在查看我从另一个开发人员那里获得的代码时,我遇到了以下代码。
public void myMethod()
{
final MyClass data1 = new MyClass(1,2,3);
final MyClass data2 = new MyClass(4,5,6);
// [...]
final MyClass dataN = new MyClass(M,O,P);
ArrayList<MyClass> list = new ArrayList<MyClass>()
{
{
add(data1);
add(data2);
// [...]
add(dataN);
}
};
}
事实上,我想我知道这段代码的作用(填充list
定义的数据),但我对结果是如何实现的感到惊讶。特别是我想知道在这种情况下花括号是什么{}
意思。
我知道(认为?)这段代码很糟糕,我已经重写了它,但出于好奇,我想知道它到底做了什么。
我的猜测如下:
- 第一对
{}
是匿名对象创建 - 被强制转换为ArrayList<MyClass>
. - 第二对
{}
是 - 我正在考虑 - 类似于静态初始化但针对对象的东西。那可能是某种匿名构造函数吗?
有人可以在这里给我一些见解吗?(我在哪里可以在 java 文档中找到这样的“语法魔术”?)