当前位置: 首页 > 知识库问答 >
问题:

替换匿名新Runnable()的lambda是如何工作的?[副本]

庞安晏
2023-03-14

当您编写一个匿名可运行文件时,例如:

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中没有任何内容表明它是可运行的。
  2. 为什么突然不再需要@override public void run()了?

共有1个答案

乌骏
2023-03-14

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

 类似资料:
  • 我有这段代码,但IntelliJ告诉我用lambda替换anonymous,但我不知道如何替换。有谁能帮我一下吗?下面是我的代码:

  • 问题内容: 我在Java 8映射操作中传递了一个Function,Intellij告诉我可以将其替换为lambda表达式。但是我不知道如何在不创建中间对象结构的情况下做到这一点。 这是我的工作: 我认为Intellij建议我这样做: 我不知道一种干净的方法来获取在匿名函数中检索到的objectType.getTempUrl()。getFullUrl()部分,有什么建议吗? 问题答案: 你总是可以写

  • 我对java还是新手。是否有办法获取已替换的新字符串? 输出: 期望的新输出: 我想得到输出字符串然后将替换为

  • 问题内容: 据我所知,我们无法实例化接口,那么这是怎么发生的呢? 问题答案: 您无法实例化接口,但是可以为实现该接口的类的对象提供接口的引用,因此在代码中,您正在实现接口并创建该类的对象并提供该类的引用。

  • 可能重复: 什么是双大括号初始化在Java? 在查看一些遗留代码时,我遇到了一些非常令人困惑的问题: 在调试模式下运行代码后,我发现匿名块是在调用构造函数之后调用的。上面的功能和做的有什么不同: ?我会认为它们在功能上是等价的,并且会认为后一种方式是更好/更干净的编写代码的方式。

  • 我在JavaFX上有一个应用程序。在这个应用程序中,我需要实现专栏的编辑器。在旧版本中,该代码运行良好: 但是当我试图用lambda重写代码时 我得到一个错误:错误:java:不兼容的类型:lambda表达式中的不兼容参数类型告诉我如何指定lambda表达式的类型?