multithreading - 在为 Runnable 提供 lambda 时,为什么我不必重写 run 方法?
问题描述
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
,并且该语言会为您创建实现。这是有道理的,因为method
这些接口中只有一个(即 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)
}
}
}
推荐阅读
- sql - 连接单元格中具有多个值的表
- python - 如何根据条件在pandas df中创建一个新列:A列在B列
- c++ - 第二次读取文件后c ++程序崩溃
- javascript - 异步 Javascript Promise 设置 img 的 src
- sql - 名称中间的子字符串
- python - Django Unit Test - 过滤查询结果
- c++ - 比较用 C++20 概念表达的命名需求
- javascript - vue badger-accordion 不反映更新的值
- video.js - 如何使用 videojs-wavesurfer 或 wavesurfer.js 生成具有多种峰值颜色的 wavesurfer?
- firebase - 如何使用 firebase 自定义身份验证令牌使用 asp.net 核心查询 firestore?