通俗讲解 java 回调函数 callBack 的异步回调 一看就会懂
趣味讲解哦:
先说 这个 callBack , 扒拉很多资料 都说是 回调 ,回调。 回调 你大爷啊。
根本没说清楚 回调 到底是咋回事。
有的还说 是 什么 小明让小芳 算题 ,算好后 告诉她… 什么鬼。
我从 callback 来说 这个 回调函数吧
callback 的 英语翻译是 >>>> n.回收,回叫信号,复查;
别他嘛的 回调 回调 了 回你吗了个鬼啊。正确翻译应该 叫 接受别人回复 的函数。
callback 的意思 就是 接受信息 , callback 是个 接口。谁实现了他,谁就有接受信息的这个方法。
有人说 callback 是回电话的意思。 你让 别人 回电话 。 是不是就是 接受别人 给你的信息呢 ?
现在 搞清楚了 callback 的含义了吧 ,现在 开始 用 代码 + 解释 来 讲解 回调函数
代码 用 王者荣耀 来举例 更贴近 现实
代码 意思 是 一个 坦克 类, 一个 打野 类 ,一个 回收信息 的接口 。 坦克 实现了 回收信息 的 接口, 坦克 的 方法 有 : 自己发育(); 回收信息(); 发送计划(); 打野类 有 方法 : 执行坦克计划();
1 个 回调 callback接口 叫 “收信息” IShouXinXi 接口我习惯性的 前面加了个I 字母 。
1 个 坦克 类 叫 TanKe 。 1 个 打野 类 叫 DaYe
代码 奉上
/**
* 收 信息 的接口 :
* 收到 信息 做 事情
* @author Xin 扣扣 : 私企四四 九三零四 不懂可以加 一起交流
*
*/
public interface IShouXinXi { //相当于 CallBack 接口
void shouXinXi(String xinXi);
}
/**
* 坦克类 :
* 方法1: 发计划
* 方法2: 对线
* 方法3: 收信息 收到信息
* @author Xin
*
*/
public class TanKe implements IShouXinXi {
private DaYe daYe;
public TanKe(DaYe daYe) {
this.daYe=daYe;
}
/**
* 坦克 开局 说 战斗计划
* @param plan
*/
public void sayPlan(String plan) {
System.out.println("坦克说:"+plan);
new Thread(new Runnable() {
public void run() {
daYe.zhiXingTanKePlan(TanKe.this, plan); //打野 异步 执行 坦克的计划
}
}).start();
// 开始 战斗 坦克开始 对线了 坦克 忙别的 了 , 打野继续 打怪升级去了
duiXian();
}
/**
* 坦克 对线 , 等待 打野4级 来配合 一起 抓人。
*/
public void duiXian() {
System.out.println("坦克 对线 中....");
}
/**
* 实现了 回调接口 的方法
*/
@Override
public void shouXinXi(String xinXi) {
System.out.println("坦克 收到了 打野的信号,信号内容是:"+xinXi);
}
}
public class DaYe { //打野类
private int levl=1;
/**
* 执行 坦克 的 计划
* @param tanKe 坦克
* @param plan 坦克的 计划
*/
public void zhiXingTanKePlan(TanKe tanKe,String plan) {
//模拟 打野
for(int i=0;i<30;i++){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(i==0){
levl=4;
}
}
if (levl==4) {
String xinXi=" 坦克你好。任务已完成,我可以抓人了。请你 去把 敌人 引过来";//任务完成之后 00打野回电话
tanKe.shouXinXi(xinXi); //打野 调用 坦克,即 回调
}
}
}
public class MainTest {
public static void main(String[] args) {
DaYe sunWuKong = new DaYe(); // 打野 孙悟空 实例
TanKe yaSe = new TanKe(sunWuKong); // 坦克 亚瑟 实例
String plan="计划是:打野 猥琐发育 别浪 , 等你升 4 级 来 抓人";
yaSe.sayPlan(plan); //亚瑟说 开局计划; 等打野4级后 执行我的收信息 方法 ,我们一起抓人
}
}