为 Runnable 提供 lambda 时,为什么我不必重写 运行 方法?

When providing a lambda for Runnable why I dont have to override run method?

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 接口,并且该语言负责为您创建实现。这是有道理的,因为这些接口(即 Runnable)中只有一个 method,所以为什么要编写所有样板代码,为什么不直接提供 SAM 的实现作为 lambda ].

因此在您的示例中,即使您没有 override run method,您作为 lambda 提供的代码实际上是 run 方法的实现.完整的形式看起来像这样

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