Kotlin中使用携程对回调进行简化

本文介绍了如何在Kotlin中使用协程简化回调操作。通过对比传统的匿名内部类回调方式,展示使用suspendCoroutine函数实现回调的简洁性和易读性。这种方法尤其适用于网络请求的数据返回,能有效减少代码量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kotlin中使用携程对回调进行简化

1 、首先看一下普通回调

fun main(){
    val demo = Demo(object : CallBack{
        override fun call(str: String) {
            print("call back data is :$str");
        }

    })
    //调用回调方法
    demo.testCall()
}
object Demo {
    fun testCall(callBack: CallBack){
        callBack.call("hello world !")
    }
}
//定义一个接口
interface CallBack{
    fun call(str: String)
}

运行结果如下:
在这里插入图片描述

2、下面使用携程对其进行简化操作:

首先介绍suspendCoroutine函数
此函数必须在协程作用域或挂起函数中才能使用,它接受一个Lambda表达式,主要作用是将当前协程挂起,然后再普通线程中执行Lambda中的代码,并且在表达式中会传入一个Continuation参数,只需调用resume()或resumeWithExceptionm()方法恢复协程运行

此函数介绍摘自《第一行代码第三版》

fun main(){
    val str = testCall("http://www.baidu.com")
    println(str)
}
object Demo{
    fun testCall(call: Call){
        call.call("hello world !")
    }
}
//定义一个接口
interface Call{
    fun call(str: String)
}

suspend fun testCall(url: String): String{
    return suspendCoroutine {
        Demo.testCall(object : Call{
            override fun call(str: String) {
                it.resume("hello world ! by suspendCoroutine $url")
            }
        })
    }
}

运行结果如下
在这里插入图片描述

由上代码可以看出使用携程进行回调操作十分简洁只需一行代码就可以获取到回调结果不需要使用匿名内部类的方式

将此方式用于网络请求的返回数据这样代码不仅简洁易读也降低了重复代码量

PS:在书上看到这样的方法对于之前使用Java的回调方式来说感觉十分奇妙所以就记录了下来如有不正确的地方望指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值