`
aliusa
  • 浏览: 84056 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JAVA 基础——Call Back Function

    博客分类:
  • Java
阅读更多
纯属转载: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
分享到:
评论

相关推荐

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    面向对象编程的基础 要了解面向对象编程(OOP)的基本概念,需要理解 OOP 的三个主要概念,它们撑起 了整个 OOP 的框架。这三个概念是:封装、继承性和多态性。除此以外,还需了解对象、 类、消息、接口、及抽象等...

    call back function 示例程序

    标题提到的"call back function 示例程序"应该包含了一些演示如何在C++中使用回调函数的代码实例。描述中提到了两种类型的回调函数:有返回值和无返回值的。下面将详细解释这两种类型: 1. **无返回值的回调函数**...

    AndroidJNI.rar_java call c function

    在这个“AndroidJNI.rar_java call c function”的主题中,我们将深入探讨如何使用JNI来调用C函数。 1. **JNI基础知识**: - JNI接口定义了一系列的本地方法,这些方法使得Java代码能够与本地代码(如C/C++)进行...

    flash与C#通信 CallFunction 出现COM组件错误的处理

    这种情况下,如果参数传递或数据格式处理不当,就可能导致`CallFunction`方法执行失败,并返回`HRESULT E_FAIL`这样的错误码。根据题目中的描述,主要涉及到两个关键点: 1. **参数格式化**:调用`CallFunction`时...

    SMARTFORM基础知识.pptx

    * 导入——对应 Call Function Exporting 参数 * 导出——对应 Call Function Importing 参数 * 表——对应 Call Function Table 参数 * 例外——对应 Call Function Exceptions 参数 在程序中调用 SmartForms * ...

    VC,VB,C#与flash8结合开发中callfunction的运用

    ### VC、VB、C#与Flash 8 结合开发中 CallFunction 的运用 在软件开发领域,特别是多媒体应用开发过程中,结合使用不同的编程语言和技术框架是常见做法之一。本篇文章将详细探讨如何利用Visual C++(简称VC)、...

    对接智谱AI,支持普通对话模式以及Funcation call 的使用

    本文将深入探讨如何对接智谱AI,理解并应用其普通对话模式以及Function Call功能,以实现更高效、智能化的人机交互。 首先,智谱AI是一款先进的自然语言处理(Natural Language Processing,NLP)平台,它提供了...

    java代码-使用java解决webservice接口call调用方式的源代码

    java代码-使用java解决webservice接口call调用方式的源代码 ——学习参考资料:仅用于个人学习使用!

    hello-jni.rar_hello jni_hello-j_java call c function_java jni he

    本项目"hello-jni.rar"是一个基础的JNI示例,名为"hello jni",它展示了如何从Java程序调用本地C/C++函数。下面我们将深入探讨这个主题,详细介绍其相关知识点。 首先,JNI是Java平台的一部分,它为开发者提供了与...

    ODBC解决Call to undefined function odbc_connect

    当你遇到"Call to undefined function odbc_connect"错误时,这意味着你的PHP环境没有正确配置或者缺少必要的ODBC扩展。 解决这个问题通常涉及以下几个步骤: 1. **检查PHP安装**:首先,确保你的PHP环境中已经...

    android java CPP的callstack打印

    android java CPP的callstack函数回调打印,将文档的代码植入系统就可以。分别介绍了基于java 和 CPP的linux底层call back

    易语言CALL测试——————2010最新版

    易语言CALL测试是一种在易语言编程环境中进行的特殊函数调用技术,主要用于增强程序的功能和交互性。2010年发布的最新版本可能包含了对CALL功能的优化和更新,以提供更好的性能和兼容性。易语言是中国人自主研发的一...

    栈溢出基础——ROP1.0的例题

    栈溢出基础——ROP1.0的例题 在网络安全领域,栈溢出是一种常见的漏洞类型,它源于程序处理内存时的错误,可能导致攻击者控制程序执行流程,从而执行恶意代码。本篇将深入探讨栈溢出的基础知识,并通过一个名为...

    R6025 pure virtual function call

    当您在运行 Microsoft Windows XP 在计算机上运行 Microsoft Internet Explorer 6 时, 您可能会收到类似于以下...pure virtual function call 此外,当您单击 确定 以关闭该错误信息时可能会关闭 Internet Explorer 6。

    XML.rar_XML java_java call_java xml_xml 读写_xml读写 java

    关于“java_call_java”,这可能指的是Java中的类或方法调用。在Java程序中,一个类可以调用另一个类的方法,或者同一个类的不同方法之间相互调用。这是面向对象编程的基础,通过方法调用来实现代码的复用和模块化。...

    no matching function for call to function (解决方案).md

    no matching function for call to function (解决方案).md

    生成Java项目类间静态调用图的开源代码_java-callgraph.zip

    生成Java项目类间静态调用图的开源代码_java-callgraph

    com_callfunction_vc.rar_CallFunction

    "com_callfunction_vc.rar_CallFunction"这个标题表明,这是一个关于如何在VC++中调用COM组件的教程或资源包。"CallFunction"可能是指一个具体的函数或者方法,展示了如何通过VC++调用COM组件中的特定功能。通常,...

    遭遇了"Call to undefined function socket_create()"所需dll文件

    复制 php_sockets.dll 到ext目录 修改php.ini: extension=php_sockets.dll php4ts.dll php5ts.dll php_mime_magic.dll复制到C:\winnt\system32文件夹。 服务器

    Android java 回调例子

    相信很多初学android java的童鞋们都不太懂回调的意思,我当时也是这样的什么这个跳到那个然后又从那个调用这个的方法。。。弄得晕头转向的,今天我突然顿悟,于是写了一个回调例子与大家分享,由于手头分不多了,...

Global site tag (gtag.js) - Google Analytics