可能重复:
Java 中的双大括号初始化是什么?
在查看一些遗留代码时,我遇到了一些非常令人困惑的事情:
public class A{
public A(){
//constructor
}
public void foo(){
//implementation ommitted
}
}
public class B{
public void bar(){
A a = new A(){
{ foo(); }
}
}
}
在调试模式下运行代码后,我发现在{ foo() }
调用构造函数之后调用了匿名块A()
。上述功能与执行有何不同:
public void bar(){
A a = new A();
a.foo();
}
? 我认为它们在功能上是等效的,并且认为后一种方式是编写代码的更好/更清洁的方式。