我问你问我问你的答案——回调
来源:互联网 发布:mac显卡驱动升级 编辑:程序博客网 时间:2024/04/27 14:27
这几天朋友在找工作,打电话问了我一些面试意见和可能会问到的问题,其中说到,回调,他虽然也在用,也看了不少解释,就是不知道到底要怎么去解释这个回调。
所以今天,我也谈谈回调,给一个最简洁的小例子。
其实,个人理解的回调就是,
1.需要有两个类(调用者与被调用者,只是这两个类的调用关系比较暧昧)
2.A调用B,让B去完成某个任务
3.但B如果要完成这个任务,需要调用A的一个方法协作(这个方法,就是回调方法)
4.B成功调用了A的方法协作,B最终顺利完成了任务
本例的情景是这样的:A问B:某个数的10次方是多少?B开始作答,但是他要先问A:这个数是多少?A说:是10B给出了答案
下面来看代码:
主角有三:
1.接口CallBack类(回调方法)
2.A类(任务的发起者)
3.B类(任务的执行者)
1.首先是接口CallBack:
public interface CallBack { // 回调方法,本例的主角 float doCallBack();}
2.其次是任务发起者A类:
public class A implements CallBack { //A中的方法,参数是B类,该方法中调用B的方法 public void AaskB(B class_b) { System.out.println("A开始问B问题: 某个数的10次方是多少?"); //调用B的方法 class_b.BanswerA(this); } //回调方法,这里抽出来写,也可以直接把上面的参数this改为直接new CallBack()直接写 @Override public float doCallBack() { System.out.println("(A中的回调方法),A说,这个数是 2"); return 2; }}
3.最后是任务执行者B类:
public class B { // B中唯一的方法,被A调用了,这个方法的参数是A中的 回调函数 public void BanswerA(CallBack callback) { System.out.println("B接收到A问的问题,但是B不知道这个数是什么,他调用A中的回调方法去问这个数"); // 调用类A中的回调方法 // 然后回答 // (这里两步并作一步写) System.out.println("B接收到A说的数,给出了答案" + Math.pow(callback.doCallBack(), 10)); }}
好了,大功告成:
让我们来写个测试类Test试试:
public class Test { public static void main(String[] args) { A classA = new A(); B classB = new B(); classA.AaskB(classB); }}
控制台的输出结果:
A开始问B问题: 某个数的10次方是多少?B接收到A问的问题,但是B不知道这个数是什么,他调用A中的回调方法去问这个数(A中的回调方法),A说,这个数是 2B接收到A说的数,给出了答案1024.0
如果还觉得不够直观。
那我们可以把他们稍作改造,全部简写在一个类中
//A类public class A { //接口 public interface CallBack { void doCallBack(); } //A中的方法,调用B public void AaskB(B class_b) { class_b.BanswerA(new CallBack() { @Override public void doCallBack() { System.out.println("(A中的回调方法),A问B -- >B问A"); } }); } //B类,就一个方法(参数是接口) public static class B { public void BanswerA(CallBack callback) { callback.doCallBack(); } } //测试类 public static class Test { public static void main(String[] args) { A classA = new A(); B classB = new B(); classA.AaskB(classB); } }}
执行,控制台输出:
(A中的回调方法),A问B -- >B问A
可以看到,虽然代码大量简写(省略了一些System.out),但是主要的核心思想,”回调”这个步骤还是展现出来了
测试中,A只是执行了问B的方法,控制台输出的 却是A类中的这个回调方法中的执行逻辑。
充分体现了,A问B,B问A,B再执行完毕。这个过程
好了,献上我的源码Demo源码
分成四个类写的: http://download.csdn.net/detail/lebang08/9649587
极简版: http://download.csdn.net/detail/lebang08/9649630
0 0
- 我问你问我问你的答案——回调
- 你问我答
- 雨水我问你
- 你问我答
- BREW你问我答
- XMind你问我答
- 女人问:你爱我吗?
- 姚博文 低价狂人我问你
- .NET多线程知识你问我答
- FrankFan7你问我答之一
- 你问我为什么要写日志?
- HR你这么问,让我很慌啊!
- 【微信开发】“你问我答”
- 我问你答(1)
- 当面试官问「你有什么要问我的吗」时,应该问什么?
- 你问我答:如何提升专业人才的管理能力?
- 面试最后,你还有什么要问我的?
- 面试最后,你还有什么要问我的?
- grails 的一些命令,中文乱码,页面标签等
- 字符串转行成json的三种方式
- iOS之正则表达式的简单使用
- 计算字符出现的个数(不分大小写)
- Python+selenium 自动化环境
- 我问你问我问你的答案——回调
- 关于HTML5,最牛逼的10本书!
- Android中aar和jar文件的认识
- 20、jQuery-AJAX、mysql的优化
- 不同样本之间的相似性度量(Similarity Measurement)
- navicat for mysql 注册码
- 所有工程.gitignore文件大全
- 测试人员要掌握的基本sql语句
- Android 开发之多种方案PDF阅读