我第一次遇到这种形式的Java代码:
object.methodA(new ISomeName() {
public void someMethod() {
//some code
}
});
其中ISomeName是一个接口,其中一个方法的签名与上面的someMethod()相同。
根据我的理解,我们定义了一个实现ISomeName的新的nameclass类,使用默认构造函数创建该类的对象,并将该对象作为参数传递给methodA。
这是对的吗?
此功能的名称是什么?
答案 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。