`

java中如何实现callback?

    博客分类:
  • java
阅读更多

在   Java   支持方法指针之前,Java   接口不能提供一种实现回调的好方法。如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧。    
  熟悉   MS-Windows   和   X   Window   System   事件驱动编程模型的开发人员,习惯于传递在某种事件发生时调用(即“回调”)的函数指针。Java   的面向对象模型目前并不支持方法指针,这样似乎就不可能使用这种很好的机制。但我们并不是一点办法都没有!    
  Java   的接口支持提供了一种获得回调的等价功能的机制。其技巧就是:定义一个简单接口,并在该接口中声明我们要调用的方法。    
   
  例如,假定我们希望在某个事件发生时得到通知。我们可以定义一个接口:    
   
  public   interface   InterestingEvent  
  {  
    //   这仅是一个常规方法。因此如果需要,  
    //   它可有返回值,也可接收参数。  
    public   void   interestingEvent   ();  
  }  
   
   
  这使得我们可以控制实现该接口的类的任何对象。因此,我们不必关心任何外部类型信息。与在将   C++   代码用于   Motif   时使用窗口小部件的数据域来容纳对象指针的难以控制的   C   函数相比,这种方法要好得多。    
   
  发出事件信号的类必须等待实现了   InterestingEvent   接口的对象,并在适当时候调用   interestingEvent()   方法。    
   
  public   class   EventNotifier  
  {  
    private   InterestingEvent   ie;  
    private   boolean   somethingHappened;  
   
    public   EventNotifier   (InterestingEvent   event)  
  {  
  //   保存事件对象以备后用。  
  ie   =   event;  
   
  //   还没有要报告的事件。  
  somethingHappened   =   false;  
  }  
   
    //...    
   
    public   void   doWork   ()  
  {  
  //   检查在别处设置的谓词。  
  if   (somethingHappened)  
       {  
       //   通过调用接口的这个方法发出事件信号。  
       ie.interestingEvent   ();  
       }  
  //...  
  }  
   
    //   ...  
  }  
   
   
  在上例中,我使用   somethingHappened   谓词来跟踪是否应触发事件。在许多情况下,调用此方法足以保证向   interestingEvent()   发出信号。    
   
  希望接收事件通知的代码必须实现   InterestingEvent   接口,并将自身引用传递给事件通知程序。    
   
  public   class   CallMe   implements   InterestingEvent  
  {  
    private   EventNotifier   en;  
   
    public   CallMe   ()  
  {  
  //   创建事件通知程序,并将自身引用传递给它。  
  en   =   new   EventNotifier   (this);  
  }  
   
    //   为事件定义实际的处理程序。  
    public   void   interestingEvent   ()  
  {  
  //   噢!必定发生了感兴趣的事件!  
  //   执行某些操作   ...  
  }  
   
    //...  
  }  

分享到:
评论

相关推荐

    java CallBack(回调函数)

    Java回调函数,也称为Callback机制,是面向对象编程中一种重要的设计模式,它允许一个对象在其他对象执行特定操作后得到通知或者进行后续处理。在Java中,回调通常通过接口来实现,因为Java不支持函数指针。让我们...

    java中Callback简单使用总结

    在Java编程中,Callback是一种设计模式,它允许一个对象在另一个对象完成特定操作后得到通知或进行后续处理。这种模式在异步编程、事件处理和框架设计中非常常见。当一个类A需要在完成某个任务后调用类B的方法,而这...

    java中回调函数的简单实现

    标题"java中回调函数的简单实现"主要探讨的是如何在Java中应用回调函数的概念,以便让程序更加灵活和可扩展。下面我们将深入探讨回调函数的基本原理、应用场景以及如何在Java中实现回调。 首先,回调函数的主要优点...

    JAVA_API1.6文档(中文)

    java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...

    Callback_Androidjni_AndoidJNI层到Java层的调用_android_android回调_

    总结,Android JNI层到Java层的回调是通过JNI接口实现的,涉及到Java方法的本地签名定义、C/C++代码的编写、本地库的编译以及在Java代码中接收回调。这样的机制允许开发者充分利用C/C++的性能优势,同时保持Java的...

    Java Android用接口实现广播通知

    在Android开发中,Java语言是主要的编程工具,而接口(Interface)是Java中的一个重要特性,用于实现类与类之间的通信。在这个场景中,我们讨论的是如何利用Java接口来实现广播通知,使得当某个事件发生时,可以及时...

    callBackExample

    回调在Java中通常通过接口实现,一个类实现回调接口,然后在适当的时候调用接口定义的方法。 下面我们将深入探讨回调的工作原理和使用方法: 1. **定义回调接口**:回调通常涉及定义一个接口,该接口包含一个或多...

    Android APP 用interface 接口的形式对jni进行回调,实例测试

    本实例测试主要探讨如何通过Java接口(interface)在Android App中实现对JNI层的回调,以提高应用程序的灵活性和功能性。 首先,我们需要理解Java接口在JNI中的作用。在Android中,Java接口可以作为参数传递给JNI...

    RMI CallBack

    在RMI Callback的实现中,通常包含以下几个关键组件: 1. **服务接口**(CallbackServerInterface.java):定义了服务器端需要暴露的接口,包括回调方法。这个接口需要在客户端和服务器端都可见,通常通过`import`...

    JNI 回调函数 Callback

    综上所述,JNI回调函数Callback是Android开发中连接Java和C/C++的重要方式,它使得两个世界之间的通信更为灵活,能够实现更多复杂的逻辑。在实际应用中,开发者需要熟练掌握JNI的基础知识,并了解如何安全有效地使用...

    Java中回调方法使用范例

    这种模式在Java中通常通过接口来实现,因为接口可以定义一个或多个抽象方法,而这些方法的实现由用户自定义。 标题“Java中回调方法使用范例”暗示我们将探讨如何在实际的Java程序中运用回调方法。下面是一个详细的...

    hello-jniCallback_jni_android_

    "hello-jniCallback"是一个常见的示例项目,用于演示如何在Android应用中使用JNI来调用C/C++代码,并实现回调机制。这个项目可以帮助开发者理解JNI的基本用法以及如何在Java和原生代码之间传递数据。 1. **JNI基础...

    Rmi callback

    总的来说,"Rmi callback"实例展示了如何在Java的RMI环境中实现双向通信,增强了服务器与客户端之间的交互能力。理解这个实例有助于开发者深入理解RMI的工作原理和回调机制,对于开发分布式系统具有重要的实践意义。

    CallBack_DEMO 回调

    在本示例"CallBack_DEMO"中,我们可能正在探讨如何在Java或其他编程语言中实现回调机制。回调通常与异步编程相关,尤其是在处理I/O操作、网络请求或者时间事件时,它能让程序在执行完成后继续执行后续操作,而不是...

    okhttp的两种callback封装

    而异步请求则通过`enqueue`方法,传入一个实现了`Callback`接口的对象来处理结果。 1. **返回String类型的Callback封装** 这种封装方式适用于数据格式不固定,需要在子类根据业务需求进行自定义解析的情况。首先,...

    Android JNI多线程编程回调JAVA函数

    本话题将深入探讨如何在Android中使用JNI进行多线程编程,并实现native方法对Java函数的回调。 1. **JNI基础知识**: - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在...

    java实现ocp客户端

    通过这个库,开发者可以在 Java 应用程序中轻松地与 OPC 服务器进行数据交互,实现工业自动化系统的远程监控和控制。在实际项目中,可能还需要考虑错误处理、线程安全以及性能优化等问题,以确保代码的健壮性和效率...

    java面试宝典

    169、Ajax请求总共有多少种Callback? 41 170、Javascript如何发送一个Ajax请求? 41 171、AJAX都有哪些有点和缺点? 41 172、Ajax和javascript的区别? 41 Servlet部分 42 174、JAVA SERVLET API中forward() 与...

    JniCallback.zip_Android jni_android_jni android_jni callback_jni

    JNI在很多场景下都非常有用,比如优化性能、使用现有的C/C++库、或者像在这个“JniCallback.zip”文件中所展示的,实现应用层与本地代码之间的回调功能。下面我们将深入探讨这个主题。 1. **JNI基础知识**: JNI是...

Global site tag (gtag.js) - Google Analytics