java - lambda 替换 Anonymous new Runnable() 是如何工作的?

标签 java lambda runnable anonymous-class

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

Thread producer = new Thread(new Runnable() {
      @Override
      public void run() {
        // do something
      }
});

IntelliJ 建议将其替换为以下 lambda:

Thread producer = new Thread(() -> {
       // do something
    }
});

效果一样好。

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

  1. 使用的构造函数仍然是Thread(Runnable target) ,但 lambda 中似乎没有任何内容表明它是 Runnable。
  2. 为什么 @Override public void run()突然不再需要了?

最佳答案

如果您的匿名类只有一个方法,您可以将其实现为 lambda 表达式。这里作为 lambda 传递的是 run 方法的实现。 Lambda 表达式可让您更紧凑地表达单一方法类的实例。

关于java - lambda 替换 Anonymous new Runnable() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53027843/

相关文章:

android - Android 中的锁屏可加快游戏速度

java - 无法编译程序

java - 使用多个不同的数字范围检查字符串值

c++ - 错误:非静态数据成员声明了 ‘auto’

python - 如何在 lambda、python 中保存索引

objective-c - Objective-c 中的 Smalltalk block ?

java - Java 中的安全 imap 连接

java - 想要在标签中显示日期

Java - 如何告诉所有子线程都完成了

android - Android 中的 Async Task、Runnable 和 Handler 哪个更好