Kotlin高阶函数及函数作为参数传递(2)
在 https://blog.csdn.net/zhangphil/article/details/157394295 基础上改进。
Kotlin
import kotlin.random.Random
fun main() {
val a = 1
val b = 2
sumFun(a, b, { it ->
println("$a+$b=$it")
})
println("---")
var n = 2025
val s = "zhang"
myTaskStart(n, s, { nn, ss, result ->
println("myTaskStart $nn $ss $result")
})
n = 2026
myTaskCancel(n, { nn, result ->
println("myTaskCancel $nn $result")
})
}
fun sumFun(a: Int, b: Int, func: (result: Int) -> Unit) {
val sum = a + b
func.invoke(sum)
}
private fun myTaskStart(n: Int, s: String, func: (num: Int, ss: String?, result: Boolean) -> Unit) {
apiTask(n, s, object : ApiCallback {
override fun apiExec(n: Int, s: String?, result: Boolean) {
func.invoke(n, s, result)
}
})
}
private fun myTaskCancel(n: Int, func: (num: Int, result: Boolean) -> Unit) {
apiTask(n, null, object : ApiCallback {
override fun apiExec(n: Int, s: String?, result: Boolean) {
func.invoke(n, result)
}
})
}
/**
* 假设这里是api内部的耗时任务执行体
*/
fun apiTask(n: Int, s: String? = null, callback: ApiCallback) {
val r = Random.nextBoolean()
println("api task run n=$n s=$s")
Thread.sleep(1000)
callback.apiExec(n, s, r)
}
interface ApiCallback {
fun apiExec(n: Int, s: String? = null, result: Boolean) {
}
}
运行输出:
1+2=3
api task run n=2025 s=zhang
myTaskStart 2025 zhang true
api task run n=2026 s=null
myTaskCancel 2026 false
Process finished with exit code 0