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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

最近項目中開始使用kotlin,遇到的一個問題就是從多方法回調的問題
常規的java回調如下:

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) {//請求失敗} }public void getData(OnRespCallBack<String> callBack) {//進行網絡請求或者其他耗時操作...callBack.onSuccess(response);//請求失敗時的回調...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的話,可以使用匿名內部類來實現,回調方法調用如下:

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

但是如此使用,很不方便,也體現不出來kotlin簡潔的優勢,這時候就可以考慮使用kotlin的高級函數了。
對于上面的多方法回調,有如下兩種修改方式:
方式一:在java基礎上修改

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>) {//進行網絡請求或者其他耗時操作...callBack.onSuccess(response)//請求失敗時的回調...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()//進行網絡請求或者其他耗時操作...back.onSuccess(response)//請求失敗時的回調...back.onFailed(message) }pubcli void setData() {getData{onSuccess {//do success}onFailed {//do error}} }

參考文章:
Kotlin多方法回調簡化(Lambda表達式,recyclerView回調)
kotlin 多接口回調的實現方式(一)
kotlin 多接口回調的實現方式(二)
Kotlin 使用高階函數實現回調

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。