纯属转载:
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 的框架。这三个概念是:封装、继承性和多态性。除此以外,还需了解对象、 类、消息、接口、及抽象等...
标题提到的"call back function 示例程序"应该包含了一些演示如何在C++中使用回调函数的代码实例。描述中提到了两种类型的回调函数:有返回值和无返回值的。下面将详细解释这两种类型: 1. **无返回值的回调函数**...
在这个“AndroidJNI.rar_java call c function”的主题中,我们将深入探讨如何使用JNI来调用C函数。 1. **JNI基础知识**: - JNI接口定义了一系列的本地方法,这些方法使得Java代码能够与本地代码(如C/C++)进行...
这种情况下,如果参数传递或数据格式处理不当,就可能导致`CallFunction`方法执行失败,并返回`HRESULT E_FAIL`这样的错误码。根据题目中的描述,主要涉及到两个关键点: 1. **参数格式化**:调用`CallFunction`时...
* 导入——对应 Call Function Exporting 参数 * 导出——对应 Call Function Importing 参数 * 表——对应 Call Function Table 参数 * 例外——对应 Call Function Exceptions 参数 在程序中调用 SmartForms * ...
### VC、VB、C#与Flash 8 结合开发中 CallFunction 的运用 在软件开发领域,特别是多媒体应用开发过程中,结合使用不同的编程语言和技术框架是常见做法之一。本篇文章将详细探讨如何利用Visual C++(简称VC)、...
本文将深入探讨如何对接智谱AI,理解并应用其普通对话模式以及Function Call功能,以实现更高效、智能化的人机交互。 首先,智谱AI是一款先进的自然语言处理(Natural Language Processing,NLP)平台,它提供了...
java代码-使用java解决webservice接口call调用方式的源代码 ——学习参考资料:仅用于个人学习使用!
本项目"hello-jni.rar"是一个基础的JNI示例,名为"hello jni",它展示了如何从Java程序调用本地C/C++函数。下面我们将深入探讨这个主题,详细介绍其相关知识点。 首先,JNI是Java平台的一部分,它为开发者提供了与...
当你遇到"Call to undefined function odbc_connect"错误时,这意味着你的PHP环境没有正确配置或者缺少必要的ODBC扩展。 解决这个问题通常涉及以下几个步骤: 1. **检查PHP安装**:首先,确保你的PHP环境中已经...
android java CPP的callstack函数回调打印,将文档的代码植入系统就可以。分别介绍了基于java 和 CPP的linux底层call back
易语言CALL测试是一种在易语言编程环境中进行的特殊函数调用技术,主要用于增强程序的功能和交互性。2010年发布的最新版本可能包含了对CALL功能的优化和更新,以提供更好的性能和兼容性。易语言是中国人自主研发的一...
栈溢出基础——ROP1.0的例题 在网络安全领域,栈溢出是一种常见的漏洞类型,它源于程序处理内存时的错误,可能导致攻击者控制程序执行流程,从而执行恶意代码。本篇将深入探讨栈溢出的基础知识,并通过一个名为...
当您在运行 Microsoft Windows XP 在计算机上运行 Microsoft Internet Explorer 6 时, 您可能会收到类似于以下...pure virtual function call 此外,当您单击 确定 以关闭该错误信息时可能会关闭 Internet Explorer 6。
关于“java_call_java”,这可能指的是Java中的类或方法调用。在Java程序中,一个类可以调用另一个类的方法,或者同一个类的不同方法之间相互调用。这是面向对象编程的基础,通过方法调用来实现代码的复用和模块化。...
no matching function for call to function (解决方案).md
生成Java项目类间静态调用图的开源代码_java-callgraph
"com_callfunction_vc.rar_CallFunction"这个标题表明,这是一个关于如何在VC++中调用COM组件的教程或资源包。"CallFunction"可能是指一个具体的函数或者方法,展示了如何通过VC++调用COM组件中的特定功能。通常,...
复制 php_sockets.dll 到ext目录 修改php.ini: extension=php_sockets.dll php4ts.dll php5ts.dll php_mime_magic.dll复制到C:\winnt\system32文件夹。 服务器
相信很多初学android java的童鞋们都不太懂回调的意思,我当时也是这样的什么这个跳到那个然后又从那个调用这个的方法。。。弄得晕头转向的,今天我突然顿悟,于是写了一个回调例子与大家分享,由于手头分不多了,...