一、什么是回调
回调是一种双向调用模式,什么意思呢,就是说,被调用方在被调用时也会调用对方,这就叫回调。“If you call me, i will call back”。
eg:
public interface CallBack {
// 定义一个报告 反馈的方法
public void baoGao(int num);
}
Boss implements callback{
Worker a=new worker();
//派a去干活,并且把自己传进去
a.gojob(this);
@Override
public void baoGao(int num) {
System.out.println("员工反馈工作信息");
}
}
Worker extends Employee {
@Override
public void wanChengRenWu(CallBack callBack) {
// 回调操作,反馈给领导情况
//这个callBack其实也就是老板.深刻体现了,只要你调用我,我就会反过来调用你
//所以为什么发起调用的一方要实现一个接口(或者也相当于抽象类吧),就是为了便于接收方反过来调用发起方的函数.
callBack.baoGao(666);
}
}
也就是类A,实现了call接口,你也可以把它叫call类
call类 调用 B类的方法,B类内部 会调用call类的方法
这就叫你调用我,我调用你.
至于为什么是回调,B类一定会调用call类的某个方法
如果有D类也想和B完成回调,即调用B的时候,被B调用,只需要实现call接口,并且重写方法就行
当然。这只是一个例子,不要就是只死板认为这才是回调。
但是回调一定会有一个标志
就是被调用类里会有一个方法
fun(接口call a){
a.func()
}
这个就是典型的回调标志了,在方法里再反过来调用参数的方法。
举个例子 B类里 静态方法 就是上面这个
然后在A类里使用 B类的fun方法
也未必就是A类去实现接口call
静态方法可以直接用类名调用
B.fun(new call {实现接口方法})
这也是一种回掉呀,只不过参数a其实是一个匿名类
new 了这个接口,实现了函数的匿名类
(接口照理来说是不能new的,不过看到了一种说法,这种匿名内部类写法可以理解为实现了接口,但是没有类名的类,所以其实还是一种类)
Java语言中经常会使用到回调机制,或许只是平时没有注意到吧。比如Android开发中的OnClickListener,当按键触发的时候会执行用户实现的回调方法,从而完成对按键的反馈。
开发过程当中存在某种特殊的业务需求,例如:
描述:
描述:
/**
* 定义回调的接口,只需要定义一个报告反馈的方法即可
*/
public interface CallBack {
// 定义一个报告 反馈的方法
public void baoGao(int num);
}
/***
* 定义一个老板Boss类,需要去实现回调的接口 CallBack
*/
public class Boss implements CallBack {
// 定义下达任务的方法.需要在下达任务的当中调用 员工 完成任务的方法
public void xiaDaRenWu(Employee e) {
// 当下达任务的时候给出提示.等待着某位员工去完成任务
System.out.println("Boss下达任务了,等待员工去完成...");
// 员工去完成任务
// 由于Boss实现了接口,可以将Boss的对象 this作为参数传递
e.wanChengRenWu(this);
}
// 在报告的方法当中.需要去调用 员工信息
@Override
public void baoGao(int num) {
System.out.println("员工报告回馈信息: " + num);
}
}
public abstract class Employee {
// 员工当中完成任务的操作
public abstract void wanChengRenWu(CallBack callBack);
}
/**
* 定义具体的员工类KoBe.完成员工任务的操作
*/
public class KoBe extends Employee {
@Override
public void wanChengRenWu(CallBack callBack) {
// 模拟完成工作的情况。需要消耗一定的时间
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 回调操作,反馈给领导情况
callBack.baoGao(666);
}
}
/***
* 定义测试类完成 测试.创建老板Boss的对象以及 员工对象
*/
public class Test {
public static void main(String[] args) {
// 老板的对象
Boss b = new Boss();
// 具体员工的对象
KoBe k = new KoBe();
// 老板下达任务
b.xiaDaRenWu(k);
}
}
最终运行效果(“员工报告反馈信息”等4秒后 才会出现)
Boss下达任务了,等待员工去完成…
员工报告回馈信息: 666
四、 后序
这个例子是一个典型的体现接口作用的例子,有些朋友可能不太明白接口的好处.
当各位朋友不太明白接口好处的朋友可以重点看一下这个例子,多多理解。
总结起来,回调的核心就是 回调方将本身即this传递给调用方.这样调用方就可以在调用完毕之后告诉回调方它想要知道的信息。
命名:由于A调用B的函数,所以A是调用方,B是被调用方,由于A被回调,也是A实现回调函数,所以也叫A为回调方
A 是回调方(调用方),A将自己this 传递给被调用方B,被调用方B在调用完毕后告诉A 所需信息。
类A的a()方法调用了类B的b()方法
类B的b方法执行完毕主动调用类A的callback()方法
回调函数callback()是一个函数,它是一个由回调方(调用方)A自己实现,供被调用方B使用的特殊函数。
在面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象。
文章浏览阅读377次。#include#include const bool TURE=1;const bool FAULT=0;using std::cout;using std::cin;using std::endl;class Node{//链式堆栈的节点类public:Node();//构造函数重载1Node(int , int , int ,Node *);//构造函数重载2void const get_d..._java顺序队列跳舞匹配
文章浏览阅读8k次,点赞2次,收藏9次。模拟并发请求, 来测试api性能---压力测试以及需要后端[如: php ]直接请求远程服务器[调用远程服务],但是需求是一次发送多个请求._ab工具模拟并发
文章浏览阅读4次。查询语句语法:Select 属性From 表Where 条件Group by 分组条件Having 分组选择条件Order by 排序条件1、from子句组装来自不同数据源的数据;2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数(列函数)进行计算;5、使用having子句筛选分组;6、计算所有的表达式,主要是sele...
文章浏览阅读620次,点赞16次,收藏14次。大学兼职教师管理系统,旨在提高高校兼职教师的管理效率和准确性。该系统包括教师信息管理、授课管理、班级管理、课程评价管理等模块,通过对兼职教师的基本信息、班级状况和成绩评估进行集中管理,实现各种管理目标。该系统还具有良好的用户体验和便利性,允许管理员轻松完成每项任务,兼职教师也可以通过该系统查看他们的个人信息和课程状态。最后,通过实际应用验证了该系统的可行性和有效性,表明该系统能够满足高校兼职教师管理的需要。
文章浏览阅读4.9k次,点赞35次,收藏83次。本文是参考b站麦扣老师比较老的课程了,我已经看完了,后面发现`缺失`了挺多功能的:* 比如扩展性不好,多NPC很难将对话分开* 快速显示的实现过于麻烦了* 对话框显示在世界坐标,UI无法适配屏幕的变化* 文本只支持显示内容,不支持显示角色名称和人物的不同表情变化_游戏对话系统源码
文章浏览阅读100次。题记:写这篇博客要主是加深自己对安装脚本的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。 网上有一些绍介, 英文的有一些, 文中的多不, 比如: 这个挺细详, 图很多, 但他们说得都不面全, 不同年月的器机, 置配不尽相同. 这里绍介的是:用脚本程序来成完大多数的置配任务, 取代人工置配. 为什么 因为前目Mac真..._mac virtualbox怎么设置打开mac bootcamp 安装的windows系统
文章浏览阅读234次。之前我做了蓝牙遥控的小车,这里为了拓展遥控的距离,我准备采用CC1101模块进行拓展距离。端口的配置上我使用MCC进行配置,这样就不需要在移植代码中实现一堆的初始化了,非常方便。PIC和AVR都具备内部上拉电阻,在需要配置为输入的端口,使用上拉稳定电平是非常容易的。另外MCC的端口可定制新名字功能,非常有助于我们移植代码,防止多了就容易乱。以及SPI的端口操作映射,只需要在对应的头文件修改成MCC生成的代码即可。按钮的使用,也是非常容易,直接使用MCC生成的函数。来源:21ic.com。_pic18f16q41
文章浏览阅读2.3k次,点赞5次,收藏2次。当使用presto将clickhouse作为数据源进行查数据,如果其中有字符类型的话,比如说String或者FixString时,当我们对该字段进行筛选时,会报错 varbinary_cannot apply operator: varchar <= date
文章浏览阅读3.9k次。本文翻译自Annoy(高维空间向量快速计算相似性的开源工具)的作者Erik Bernhardsson写的介绍Annoy的系列博客。这是第一篇,主要介绍了向量空间模型,降维等。作者曾是Spotify的数据科学家。_最近邻法计算法向量
文章浏览阅读2.7k次,点赞2次,收藏6次。weex实战项目开发经验前言本人近期加入了公司开发的一款应用i7,此款应用前端选用的weex开发语言,就weex下面我来讲解一下自己的经验总结,可能不全。正文1. 什么是weex? WEEX是一个使用Web开发体验来开发高性能原生应用的框架介绍这里,我参照的官网,建议同学们还是去官网看一遍,下面有网址。Weex是使用同一套代码来构建 Android..._怎么写项目用weex
文章浏览阅读231次。PEFC也是国际上较为知名的森林认证体系之一,其认证标准强调森林管理的可持续性与环境保护,同时也注重森林产品的质量与流通。总的来说,FSC标准更加严格,社会、环境与市场三方面要求相对均衡,其次的拓展。总之,FSC和PEFC的审核内容并不完全相同,分别针对其所面向的市场和行业,在审核标准和要求上各自有着不同的侧重点。PEFC认证则更侧重产品管理,对于森林管理、砍伐、加工和流通等方面的要求类似FSC,最大的不同是,PEFC标准下所涉及到的比较常见的问题有工厂设备的条件、作业人员的资质要求、物流的控制等问题。_全球两种主要的森林认证体系
文章浏览阅读582次。实时录制视频,实时去除人 如果您是进行现场会议的团队的一员,则有可能要录制发言人的演讲并在网上发布。 幸运的是,这要归功于开源软件和现成的硬件,这在今天是容易且相对便宜的。 有关录制实时演示文稿的本系列的第1部分 ,介绍了您需要的设备。 现在该准备软件来捕获视频了,第3部分将解释如何记录演示文稿并排除所有问题。 该项目使用两个跨平台的免费和开源软件包:用于进行实时录制的Open Broadc..._macobs音频采集0.0db是什么意思