首页 > 解决方案 > Java lambda 方法和新对象

问题描述

我有以下代码:

public class RefDemo {

    static class Demo implements Runnable {

        public Demo() {
            System.out.println(this.toString() + "-----");
        }

        @Override
        public void run() {
            System.out.println("run");
        }
    }

    public static void main(String[] args) {
        Runnable runnable = Demo::new; // lambda ref constructor method
        runnable.run(); // does not do anything
        System.out.println(runnable);
        Runnable demo = new Demo(); // using new to create a Demo instance
        demo.run();
        System.out.println(demo);
    }
}

哪个打印:

RefDemo$Demo@7291c18f----- // lambda run constructor method print
RefDemo$$Lambda$1/793589513@34a245ab // main method print
RefDemo$Demo@7cc355be-----
run
RefDemo$Demo@7cc355be

run不知道为什么调用时代码不打印runnable.run();

为什么会这样?

标签: javalambdajava-8

解决方案


这段代码

Runnable runnable = Demo::new;

相当于这段代码

Runnable runnable = new Runnable() {
    @Override 
    public void run() {
        new Demo();
    }
};

所以你指的不是构造函数的run方法,Demo而是构造函数。


推荐阅读