Java中方法参数内的类定义?

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.

这是正确的吗?

这个功能的名称是什么?

Jon*_*eet 4

它正在创建一个匿名类

请注意,在匿名类中,您可以在方法的早期代码中引用最终局部变量,包括最终参数:

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)

变量的被传递到匿名类的构造函数中。这是闭包的弱形式(弱是因为限制:仅复制值,这就是变量必须是最终变量的原因)。