Runnable::new vs new Runnable()
2022-08-31 15:40:15
为什么以下第一个示例不起作用?
-
run(R::new);
不调用方法。R.run
-
run(new R());
调用方法。R.run
这两个示例都是可编译的。
public class ConstructorRefVsNew {
public static void main(String[] args) {
new ConstructorRefVsNew().run(R::new);
System.out.println("-----------------------");
new ConstructorRefVsNew().run(new R());
}
void run(Runnable r) {
r.run();
}
static class R implements Runnable {
R() {
System.out.println("R constructor runs");
}
@Override
public void run() {
System.out.println("R.run runs");
}
}
}
输出为:
R constructor runs
-----------------------
R constructor runs
R.run runs
在第一个示例中,调用构造函数,它返回 lambda(不是对象):R
但是,这怎么可能成功编译该示例呢?