{{ ... }}Java中的Double Brace初始化语法()是什么?
是否可以传递参数或访问外部参数到匿名类?例如:
int myVariable = 1;
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// How would one access myVariable here?
}
});
Run Code Online (Sandbox Code Playgroud)
有没有办法让侦听器访问myVariable或传递myVariable而不将侦听器创建为实际的命名类?
在查看一些遗留代码时,我遇到了一些令人困惑的事情:
public class A{
public A(){
//constructor
}
public void foo(){
//implementation ommitted
}
}
public class B{
public void bar(){
A a = new A(){
{ foo(); }
}
}
}
Run Code Online (Sandbox Code Playgroud)
在调试模式下运行代码后,我发现在{ foo() }调用构造函数后调用匿名块A().上述功能与以下功能有何不同:
public void bar(){
A a = new A();
a.foo();
}
Run Code Online (Sandbox Code Playgroud)
?我认为它们在功能上是等价的,并且认为后一种方式是更好/更清晰的编写代码的方式.

请看上面的图片(来自Wrox Beginning Spring的书)
我有这个问题是什么{}?
是构造函数吗?功能块?是"accountsMap"的块吗?它是什么 ?
请在java中解释这个功能?这个功能的名称是什么?
我们不能在匿名类中声明构造函数.但是如果我需要使用局部变量的值初始化匿名类的对象的状态,我该怎么做?
在下面的代码中,为什么该getX()方法首先执行而不是构造函数:
public class ConsructorQuestion {
int x = getX(); // same this.getX();
public int getX() {
System.out.println(x + " via method ");
return 10;
}
public ConsructorQuestion() {
System.out.println(x+" via constructor");
}
public static void main(String[] args) {
ConsructorQuestion t = new ConsructorQuestion();
}
}
Run Code Online (Sandbox Code Playgroud)