为什么要用接口回调

        先说什么叫回调,是指通过函数参数传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序

        因为设计底层代码时并不知道上层代码是怎样实现的,而底层代码又需要上层的实现时,就产生了回调的使用场景,比如jdk设计集合库和线程库时就有用到过,如Collections.sort(List<T> list, Comparator<? super T> c),Comparator接口就是让上层用户实现然后被底层调用,线程的Runnable接口也是如此。

        然后再说为什么要用接口去回调,那是因为java是一种将指针封装隐藏的语言,并不能使用函数指针,所以才会去用接口去实现回调。

### 接口回调的特点 接口回调作为一种传统且广泛使用的模式,在多种编程语言中均有应用。在Kotlin中,接口回调具有如下特点: #### 特点一:清晰的角色划分 通过定义特定的接口,可以明确区分调用者和被调用者的职责范围。这有助于提高代码可读性和维护性[^1]。 #### 特点二:支持多线程环境下的通信 对于涉及跨线程的操作而言,利用接口作为桥梁能够在不同线程间传递消息或数据变化的通知,从而简化并发程序的设计。 #### 特点三:灵活性较高 开发者可以根据实际需求自定义接口中的方法签名及其参数列表,使得该方式能够适应更多样化的业务逻辑处理流程。 --- ### 应用场景实例展示 下面将以一个简单的网络请求为例说明如何运用接口来进行回调操作: 假设存在一个名为`NetworkService`的服务类负责发起HTTP GET 请求获取远程资源;另一个组件则订阅此服务并希望在其完成加载后得到通知以便更新UI界面或其他后续动作。 ```kotlin // 定义一个通用的数据响应监听器接口 interface DataResponseListener { fun onSuccess(data: String?) fun onFailure(errorMsg: String) } class NetworkService { private lateinit var listener: DataResponseListener // 设置外部传入的监听对象 fun setOnDataFetched(listener: DataResponseListener){ this.listener = listener } // 模拟执行耗时任务(如网络IO),完成后触发相应状态改变 fun fetchData(url:String){ Thread{ try { // 假设此处进行了真实的网络访问... val result="模拟接收到的数据" // 主动告知观察者已完成工作 if (this::listener.isInitialized) { listener.onSuccess(result) } } catch(e:Exception){ if (this::listener.isInitialized) { listener.onFailure("发生错误:${e.message}") } } }.start() } } ``` 在此基础上,任何想要接收来自`NetworkService`反馈的应用模块只需实现`DataResponseListener`即可轻松参与到整个交互过程中去。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值