Java核心技术读书笔记6-2 什么是回调(callback)与回调函数?以及如何用Java实现?
2021/11/10 22:10:40
本文主要是介绍Java核心技术读书笔记6-2 什么是回调(callback)与回调函数?以及如何用Java实现?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
2.回调
2.1 什么是回调:
在计算机科学中,回调函数是指一段以参数的形式传递给其它代码的可执行代码。简单地说,函数A的参数是一个函数,在A中执行这个参数函数的形式与过程就是回调。其中作为参数传入函数A的函数就是回调函数。一般在应用开发过程中,我门是负责编写回调函数的。将函数传入其它函数,要求其它类库函数或者系统执行我们的函数。那么为什么我们不能直接调用这个服务呢?同时,如果要是让我们编写函数A我们该如何做呢?为什么我们不能直接在函数中调用作为参数的那个函数呢?
举个例子:我们现在有一个函数,功能是能够识别杯子容量并自动打水的饮水机,而作为回调函数,其功能是拧开一个杯子,并返回其容量。那么我们的两个函数伪代码可以这样写:
//不同的将要作为回调函数的函数 int fun 打开矿泉水瓶(){ 拧开瓶盖; 调整瓶子状态; return 250; } int fun 打开暖壶(){ 打开外盖; 打开木塞; 调整瓶子状态; return 2000; } int fun 打开饮水瓶(){ 打开开关; 按下按钮; 调整瓶子状态; return 500; } //提供打水服务的函数 void fun 智能饮水机(fun f1){ 启动机器识别功能 int volume = f1; //执行回调函数 打开开关; 放水volume毫升; //本函数提供的服务 关闭开关; }
那么为什么我们的回调函数不能直接调用这个服务呢?或者为什么我们不能直接在函数中调用作为参数的那个函数呢?因为可以把函数提供的功能当成一种通用的服务,而请求者(回调函数)确是可能各不相同且未知的,对于未知的请求者我们无法写出针对他的代码,不过只要他遵守一定的规则(如上面的返回一个整型)就可以调用这个服务。
如果还不理解,可以再看看这篇文章:回调函数(callback)是什么? - 码农的荒岛求生的回答 - 知乎
https://www.zhihu.com/question/19801131/answer/1641403537
2.2 如何用Java实现回调
对于回调,主要就是要把函数作为参数传入到另一个函数中,在C/C++中这个很容易用函数指针实现。在Java中,由于面向对象的特性,可以将一个具有特定回调函数的对象传入到方法中,然后在方法中调用这个对象的特定回调函数(方法)。那么如何确保该对象一定拥有这个特定的回调函数呢?我们知道可以用接口提供一组规范来要求实现类具有某些行为,所以,我们可以要求传入的对象的类必须实现了具有回调函数的接口。而在Java中,一个接口类型变量可以指向任何实现了该接口的类的对象,所以我们只需把函数的参数写成接口类型的变量就可以。
之前打水机的例子用java实现为:
//接口 public interface Openable{ int openBottle(); } //一个实现类 public Class Thermos implements Openable{ ... public int openBottle(){ //作为回调函数 do something... return 500; } ... } //提供打水服务的方法 public void draw_water(Openable bottle){ do something... int volume = bottle.openBottle(); //执行回调函数(对象的方法) do something... }
这篇关于Java核心技术读书笔记6-2 什么是回调(callback)与回调函数?以及如何用Java实现?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南