Java回调函数的使用
来源:互联网 发布:电信网络代理 编辑:程序博客网 时间:2024/05/13 11:48
“通常大家说的回调函数一般就是按照别人(李四)的定好的接口规范写,等待别人(张三)调用的函数,在C语言中,回调函数通常通过函数指针来传递;在Java中,通常就是编写另外一个类或类库的人(李四)规定一个接口,然后你(张三)来实现这个接口,然后把这个实现类的一个对象作为参数传给别人的程序,别人的程序必要时就会通过那个接口来调用你编写的函数。”
使用技巧:定一个接口,在接口中声明我们想调用的方法。
在另一个方法中注册刚定义的回调接口
第一步:定义回调接口
package
com.callback;
/**
* @since 2012-02-02
* @desc 定义回调接口
*/
public
interface
CallBackInterface {
public
void
doSome();
public
void
exectueMethod();
}
第二步:李四编写的程序
package
com.callback;
/**
* @since 2012-02-02
* @desc 李四
*/
public
class
MethodB {
public
double
getTime(CallBackInterface callBack) {
long
start = System.currentTimeMillis();
callBack.exectueMethod();
long
end = System.currentTimeMillis();
System.out.println(
"cost time="
+ (end - start));
return
end - start;
}
}
第三步:张三实现李四规定的接口
package
com.callback;
/**
* @since 2012-02-02
* @desc 张三
*/
public
class
MethodA {
public
static
void
main(String args[]){
MethodB b=
new
MethodB();
//返回值d只和MethodB有关,和接口中方法的返回值无关
double
d=b.getTime(
new
CallBackInterface() {
//张三实现了李四定义的接口
public
void
exectueMethod() {
new
MethodA().testMethod();
}
@Override
public
void
doSome() {
}
});
System.out.println(
"d="
+d);
}
public
void
testMethod(){
for
(
int
i=
0
;i<
10000
;i++){
System.out.print(
""
);
}
}
}
输出结果:
cost time=31
d=31.0
理解“回调函数”
所谓回调,就是客户程序CLIENT调用服务程序SERVER中的某个函数SA,然后SERVER又在某个时候反过来调用CLIENT中的某个函数CB,对于CLIENT来说,这个CB便叫做回调函数。例如Win32下的窗口过程函数就是一个典型的回调函数。 一般说来,CLIENT不会自己调用CB,CLIENT提供CB的目的就是让SERVER来调用它,而且是CLIENT不得不提供。由于SERVER并不知道CLIENT提供的CB叫甚名谁,所以SERVER会约定CB的接口规范(函数原型),然后由CLIENT提前通过SERVER的一个函数R告诉SERVER自己将要使用CB函数,这个过程称为回调函数的注册,R称为注册函数。Web SERVERerviCliente以及Java的RMI都用到回调机制,可以访问远程服务器程序。 下面举个通俗的例子: 某天,我打电话向你请教问题,当然是个难题,:),你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。故事到此结束。这个例子说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。 通过上面个人感觉到回调函数更多的应用就是结合异步。比如:ajax中jServer通过组件和服务器的异步通信。 什么是回调函数 精妙比喻:回调函数还真有点像您随身带的BP机:告诉别人号码,在它有事情时Call您 回调用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。 其实回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,一般这个函数对高层都是已知的;而回调正好相反,他是高层提供给底层的调用,对于低层他是未知的,必须由高层进行安装,这个安装函数其实就是一个低层提供的API,安装后低层不知道这个回调的名字,但它通过一个函数指针来保存这个回调,在需要调用时,只需引用这个函数指针和相关的参数指针。其实:回调就是该函数写在高层,低层通过一个函数指针保存这个函数,在某个事件的触发下,低层通过该函数指针调用高层那个函数。
参考 :http://www.cnblogs.com/wangchenyang/archive/2011/08/16/2140744.html
- java回调函数的使用笔记
- Java回调函数的使用
- Java中回调函数的使用
- java回调函数的使用
- 关于JAVA回调函数的使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- Java回调函数使用
- 回调函数的使用
- RichEditCtrl的使用经验
- StringBuilder与StringBuffer的区别
- mahout中决策森林学习记录
- 简单的题目6
- JMX(一)
- Java回调函数的使用
- 设计模式的意义
- UPNP危害
- org.aspectj...异常
- 有关C和C++中的bool值的使用问题
- RT—thread 上的1588协议在stm32上实现代码及说明
- 解决Android Checkbox Padding无效的Bug
- 常用英语合成词大全,感谢高人收集!(转自iCIBA)
- ZFS文件系统(7) -- ZIL