multithreading - 在为 Runnable 提供 lambda 时,为什么我不必重写 run 方法?

标签 multithreading kotlin lambda overriding

enter image description here

val obj = Runnable {
        for (i in 1..3)
        {
            println("$i")
            Thread.sleep(500)
        }
    }
    val r1 = Thread(obj)
    r1.start()

最佳答案

Kotlin 有一个称为 SAM(Single Abstract method) Conversion 的功能。 ,它允许您指定 lambda在哪里 SAM接口(interface)是预期的,语言负责为您创建实现。这是有道理的,因为只有一个 method在这些接口(interface)中(即 Runnable),那么为什么要编写所有样板代码,为什么不提供 SAM 的实现?作为 lambda .

所以在你的例子中,即使你没有 override run method ,您提供的代码为 lambda实际上是 run方法的实现。在其完整的形式中,它看起来像这样

val obj = object: Runnable{
    override fun run() {
        for (i in 1..3)
        {
            println("$i")
            Thread.sleep(500)
        }
    }
}

关于multithreading - 在为 Runnable 提供 lambda 时,为什么我不必重写 run 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61408458/

相关文章:

c++ - 任务委托(delegate)调度器

android - 向 ScrollView 添加元素会使应用程序 Android SDK 崩溃

python - IDLE和pycharm中的python线程方法有区别吗?

kotlin - 如何将 Injekt 库中的injectLazy() 委托(delegate)与泛型一起使用?

intellij-idea - 如何在 IntelliJ 中更改 Kotlin 的 'this property has a backing field' 代码编辑器高亮显示?

list - 方案:如何检查列表的所有元素是否相同

Java Streams — 如何每第 n 个项目执行一个中间函数

C++ boost 线程 ID 和单例

java - 尝试使用 Retrofit @Streaming 注释下载大文件时出现 OutOfMemoryError

java - 在不同的类中实现类的方法