Kotlin高阶函数及函数作为参数传递(2)

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

相关推荐
JohnnyDeng941 天前
【Android】Room 数据库高级用法与性能调优:从查询瓶颈到毫秒级响应
android·性能优化·kotlin·room
Refrain_zc1 天前
Android 英语口语评测:从录音采集到单词级着色反馈的完整技术方案
kotlin
plainGeekDev1 天前
文件读写(Java IO)→ Kotlin 扩展函数
android·java·kotlin
消失的旧时光-19431 天前
Kotlin 协程设计思想(九):Flow 到底是什么?为什么 suspend 函数还需要 Flow?
android·kotlin·协程·协程异常
消失的旧时光-19431 天前
Kotlin 协程设计思想(八):suspend 到底是什么?为什么 suspend 不是开启协程?
android·kotlin·suspend·continuation
plainGeekDev1 天前
SharedPreferences → DataStore
android·java·kotlin
plainGeekDev1 天前
Cursor 操作 → Room DAO
android·java·kotlin
朝星1 天前
Android开发[10]:性能优化之内存
android·kotlin
brycegao3211 天前
Android MVI进阶:纯原生实现Slot化可插拔架构
android·kotlin·架构设计·mvi·viewmodel