猿问

替换匿名 new Runnable() 的 lambda 如何工作?

当您编写匿名Runnable 时,例如:


Thread producer = new Thread(new Runnable() {

      @Override

      public void run() {

        // do something

      }

});

IntelliJ 建议用以下 lambda 替换它:


Thread producer = new Thread(() -> {

       // do something

    }

});

效果一样好。


这是如何工作的?特别是:


使用的构造函数仍然是Thread(Runnable target),但 lambda 中似乎没有任何内容表明它是一个 Runnable。

为什么@Override public void run()突然不再需要了?


哈士奇WWW
浏览 375回答 1
1回答

ibeautiful

如果您的匿名类只有一种方法,您可以将其实现为 lambda 表达式。您在这里作为 lambda 传递的是该run方法的实现。Lambda 表达式让您可以更紧凑地表达单一方法类的实例。
随时随地看视频慕课网APP

相关分类

Java
我要回答