Java回调函数的理解
来源:互联网 发布:单片机plc哪个好学 编辑:程序博客网 时间:2024/04/30 11:17
所谓回调,就是客户程序Client调用服务程序Server中的某个函数funA(),然后Server又在某个时候反过来调用Client中的某个函数funB(),对于Client来说这个funB()就叫做回调函数,一般情况下,Client不会自己调用funB(),Client提供funB()的目的就是为了让Server来调用它,而且Client不得不提供这样一个函数。但是,由于Server并不知道Client所提供的funB()的具体情况,所以Server会约定funB()的接口规范(函数原型),然后由Client提前通过Server的一个函数register()来通知Server自己将要使用funB()函数,这个过程称为回调函数的注册,register()称为注册函数。
下面讲一个通俗的例子:
某天,我打电话向你请教一个问题,你一时想不出解决方案,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后在打电话通知我,这样,我就先挂了电话办其他事情去了。过了10分钟,我的手机响了,你电话告诉我问题的解决方案!
总结:这个案例中,你打电话告诉我解决方案就是一个"回调"的过程;我的手机号码必须在以前告诉你,这就是注册回调函数;我的手机号码必须有效并且能够接听到你的呼叫,这就叫回调函数必须符合接口规范。
实例:小明写了一段程序A,其中预留了回调函数接口,并封装好了该程序。小华写了一段程序B,小华想让程序A来调用自己程序B中的一个方法,于是,他通过程序A中的接口回调自己程序B中的方法。在c/c++中,要用回调函数,被调用的函数需要告诉调用者自己的指针地址,但在java中没有指针,怎么办呢?我们可以通过接口(Interface)来实现定义回调函数。
小明写的程序A:
public class CallAproTest {private ICallBack mcall;/*通过构造函数来设置接口的引用*/public CallAproTest(ICallBack mcall) {this.mcall = mcall;}/*在这个方法中调用回调方法*/public void call(){this.mcall.test();}}定义一个接口,以便小华根据接口编写程序实现:
/** * 回调接口 * */public interface ICallBack {public void test();}
小华只要实现这个接口就能达到回调的目的了:
/** * 通过实现接口来达到实现回调的目的 */public class CallProTest2 implements ICallBack {/*实现接口中的额方法*/public void test() {System.out.println("回调!");}public static void main(String[] args) {/*创建小明程序的一个对象*/CallAproTest callAproTest = new CallAproTest(new CallProTest2());/*调用CallAproTest中的方法*/callAproTest.call();}}
- Java的回调函数的理解
- java的回调函数理解
- Java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解
- java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解 .
- Java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解
- Java回调函数的理解
- android基础02:eclipse集成SVN插件subclipse
- Greatest Number
- 局部权重线性回归(Locally weighted linear regression)
- 【BZOJ】【P2440】【中山市选2011】【完全平方数】【题解】【莫比乌斯反演】
- 快速素数判断的方法
- Java回调函数的理解
- Core Java 8 学习笔记(三) 输入输出
- github简单使用教程
- Android strings.xml资源文件 使用技巧
- 判断网页是否有效(404)
- 《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记
- 如何高效利用GitHub
- linux ss的使用方法
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)