日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kotlin使用高阶函数实现多方法回调

發(fā)布時(shí)間:2024/1/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin使用高阶函数实现多方法回调 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近項(xiàng)目中開始使用kotlin,遇到的一個(gè)問題就是從多方法回調(diào)的問題
常規(guī)的java回調(diào)如下:

public interface OnCallBack<T> {void onSuccess(T models);void onFailed(String message); }public abstract class OnRespCallBack<T> implements OnCallBack<T> {@Overridepublic void onFailed(String message) {//請(qǐng)求失敗} }public void getData(OnRespCallBack<String> callBack) {//進(jìn)行網(wǎng)絡(luò)請(qǐng)求或者其他耗時(shí)操作...callBack.onSuccess(response);//請(qǐng)求失敗時(shí)的回調(diào)...callBack.onFailed(message); }public void setData() {getData(new OnRespCallBack<String>() {@Overridepublic void onSuccess(String result) {//do success}@Overridepublic void onFailed(String message) {super.onFailed(message);//do fail} }); }

使用kotlin的話,可以使用匿名內(nèi)部類來實(shí)現(xiàn),回調(diào)方法調(diào)用如下:

pubcli void setData() {getData(object : OnRespCallBack<String>() {override fun onSuccess(models: String) {//do success}override fun onFailed(message: String) {super.onFailed(message)//do fail}}) }

但是如此使用,很不方便,也體現(xiàn)不出來kotlin簡潔的優(yōu)勢(shì),這時(shí)候就可以考慮使用kotlin的高級(jí)函數(shù)了。
對(duì)于上面的多方法回調(diào),有如下兩種修改方式:
方式一:在java基礎(chǔ)上修改

class OnCallbackImpl<T>(private val onSuccessF: (T) -> Unit, private val onErrorF: ((String) -> Unit)? = null): OnCallback<T> {override fun onSuccess(response: T) {onSuccessF(response)}override fun onFailed(message: String) {onErrorF?.let { it(message)}} }fun getData(callBack:OnRespCallBack<String>) {//進(jìn)行網(wǎng)絡(luò)請(qǐng)求或者其他耗時(shí)操作...callBack.onSuccess(response)//請(qǐng)求失敗時(shí)的回調(diào)...callBack.onFailed(message) }pubcli void setData() {getData(OnCallbackImpl(onSuccessF = {//do success}, onErrorF = {//do error})) }

方式二:用更kotlin的方式

class OnCallbackImpl<T>: OnCallback<T> {private lateinit var onSuccessF: (T) -> Unitprivate lateinit var onErrorF: (String) -> Unitfun onSuccess(listener:(T)->Unit) {this.onSuccessF = listener}override fun onSuccess(response: T) {this.onSuccessF(response)}fun onFailed(listener: (String) -> Unit) {this.onErrorF = listener}override fun onFailed(message: String) {this.onErrorF(message)} }fun getData(callback: OnCallbackImpl<String>.() -> Unit) {val back = OnCallbackImpl<String>()back.callback()//進(jìn)行網(wǎng)絡(luò)請(qǐng)求或者其他耗時(shí)操作...back.onSuccess(response)//請(qǐng)求失敗時(shí)的回調(diào)...back.onFailed(message) }pubcli void setData() {getData{onSuccess {//do success}onFailed {//do error}} }

參考文章:
Kotlin多方法回調(diào)簡化(Lambda表達(dá)式,recyclerView回調(diào))
kotlin 多接口回調(diào)的實(shí)現(xiàn)方式(一)
kotlin 多接口回調(diào)的實(shí)現(xiàn)方式(二)
Kotlin 使用高階函數(shù)實(shí)現(xiàn)回調(diào)

總結(jié)

以上是生活随笔為你收集整理的Kotlin使用高阶函数实现多方法回调的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。