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
但是,这怎么可能成功编译该示例呢?
					
				