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


问题内容

我第一次遇到这种形式的Java代码:

object.methodA(new ISomeName() {
public void someMethod() {
//some code
}
});

其中ISomeName是具有一个方法的接口,该方法的签名与上面的someMethod()相同。

据我了解,我们正在定义一个实现ISomeName的新名称类类,使用默认构造函数创建此类的对象,并将该对象作为参数传递给methodA。

这是正确的吗?

此功能的名称是什么?


问题答案:

它正在创建一个
匿名类


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

final String name = getName();

Thread t = new Thread(new Runnable() {
    @Override public void run() {
        System.out.println(name);
    }
});
t.start();

变量的 传递到匿名类的构造函数中。这是一种比较弱的
闭包

形式(由于限制而变弱:仅复制值,这就是变量必须为final的原因)。