Sha*_*ala 11 java class definition
我第一次遇到这种形式的Java代码:
object.methodA(new ISomeName() {
public void someMethod() {
//some code
}
});
Run Code Online (Sandbox Code Playgroud)
其中ISomeName是一个接口,其中一个方法与上面的someMethod()具有相同的签名.
根据我的理解,我们定义了一个实现ISomeName的新nameclass类,使用默认构造函数创建此类的对象,并将该对象作为参数传递给methodA.
这是正确的吗?
这个功能的名称是什么?
它正在创建一个匿名类。
请注意,在匿名类中,您可以在方法的早期代码中引用最终局部变量,包括最终参数:
final String name = getName();
Thread t = new Thread(new Runnable() {
@Override public void run() {
System.out.println(name);
}
});
t.start();
Run Code Online (Sandbox Code Playgroud)
变量的值被传递到匿名类的构造函数中。这是闭包的弱形式(弱是因为限制:仅复制值,这就是变量必须是最终变量的原因)。