纯属转载:
http://blog.csdn.net/giianhui/archive/2011/02/27/6211504.aspx
熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为“回调”)。Java的面向对象的模型目前不支持方法指针,似乎不能使用这种方便的机制。
回调函数 是由开发者自己编写,但不是给开发者自己调用。通常是用户通过把该方法的地址或者引用传递给系统调用者,系统在必要的时候(比如某事件发生)调用该开发者定义的方法。
例如, C++中模块 A有一个函数 foo,它向模块 B传递 foo的地址,然后在 B里面发生某种事件( event)时,通过从 A里面传递过来的 foo的地址调用 foo。
例如, java中, Class A中有一个函数 foo,它把 A的一个实例引用传递给 B(注入到 B),然后在 B里面发生某种事件( event)时,通过 A的实例去调用 foo。典型的例子就是观察者模式中的 update方法就是一个回调函数 。
Java支持interface,通过interface可以实现相同的回调。其诀窍就在于定义一个简单的interface,申明一个被希望回调的方法。
例子
FooBar
view plaincopy to clipboardprint?
public class FooBar {
// the instance of the callback
private ICallBack callBack = null;
/**
*
* @param callBack
*/
public void setCallBack(ICallBack callBack){
this.callBack = callBack;
}
public void postExec() throws RuntimeException{
if(this.callBack == null)
throw new RuntimeException("the call back must be definded~");
this.callBack.postExec();
}
}
public class FooBar {
// the instance of the callback
private ICallBack callBack = null;
/**
*
* @param callBack
*/
public void setCallBack(ICallBack callBack){
this.callBack = callBack;
}
public void postExec() throws RuntimeException{
if(this.callBack == null)
throw new RuntimeException("the call back must be definded~");
this.callBack.postExec();
}
}
ICallBack
view plaincopy to clipboardprint?
public interface ICallBack {
void postExec();
}
public interface ICallBack {
void postExec();
}
CallBack test
view plaincopy to clipboardprint?
public class Test {
public static void main(String[] args){
FooBar fooBar = new FooBar();
fooBar.setCallBack(new ICallBack(){ /** this is also be called anonymous Class**/
public void postExec() {
// TODO Auto-generated method stub
System.out.println("hello world by callback");
}
});
fooBar.postExec();
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/giianhui/archive/2011/02/27/6211504.aspx
分享到:
相关推荐
面向对象编程的基础 要了解面向对象编程(OOP)的基本概念,需要理解 OOP 的三个主要概念,它们撑起 了整个 OOP 的框架。这三个概念是:封装、继承性和多态性。除此以外,还需了解对象、 类、消息、接口、及抽象等...
回调函数的示例程序,分别对有返回的回调函数定义和无返回的回调函数进行了定义,和调用。文件都是C++类型的,转换成C类型的同样可以。
易语言CALL测试——————2010最新版
ODBC解决Call to undefined function odbc_connect
java代码-使用java解决webservice接口call调用方式的源代码 ——学习参考资料:仅用于个人学习使用!
JAVA程序通过JNI来调用Native C程序中的函数。
android java CPP的callstack函数回调打印,将文档的代码植入系统就可以。分别介绍了基于java 和 CPP的linux底层call back
flash与C#通信 CallFunction 出现COM组件错误的处理
用JAVA 的JNI调用本地c/C++的函数模块,以库函数的形式提供给Java 程序使用
VC,VB,C#与flash8结合开发中callfunction的运用,找了好久,才找到的!!!
相信很多初学android java的童鞋们都不太懂回调的意思,我当时也是这样的什么这个跳到那个然后又从那个调用这个的方法。。。弄得晕头转向的,今天我突然顿悟,于是写了一个回调例子与大家分享,由于手头分不多了,...
一位大哥写的C++ Remote call function库,该库与java的RMI类似,是corba的一种简化实现,用起来还方便吧。
复制 php_sockets.dll 到ext目录 修改php.ini: extension=php_sockets.dll php4ts.dll php5ts.dll php_mime_magic.dll复制到C:\winnt\system32文件夹。 服务器
XML应用主要是在JAVA下的调用和读写功能
php中连接mysql时出现Fatal error Call to undefined function mysql_connect() 解决方法
当您在运行 Microsoft Windows XP 在计算机上运行 Microsoft Internet Explorer 6 时, 您可能会收到类似于以下...pure virtual function call 此外,当您单击 确定 以关闭该错误信息时可能会关闭 Internet Explorer 6。
php也需要配置环境变量 解决Fatal error Call to undefined function curl_init()
Jquery check id and call back
3种开发模式(XMLHTTP+Web Form、XMLHTTP+HttpHandler和Call Back)开发Hello Word程序
java通过webservice调用asmx的实例。