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

时间:2011-03-03 11:39:35

标签: java class definition

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

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

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

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

这是对的吗?

此功能的名称是什么?

4 个答案:

答案 0 :(得分:4)

正在创建anonymous class

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

final String name = getName();

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

变量的被传递到匿名类的构造函数中。这是closures的弱形式(由于限制而很弱:只复制值,这就是变量必须是最终的。)

答案 1 :(得分:1)

这在Java中称为匿名类。这意味着您创建了实现ISomeName接口的匿名类,并作为参数传递给methodA。

答案 2 :(得分:1)

它被称为Anonymous Class(PDF链接)。

答案 3 :(得分:1)

此功能称为anonymous classes