`

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_API1.6文档(中文)

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

    java面试宝典

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

    Java 1.6 API 中文 New

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

    JavaAPI1.6中文chm文档 part1

    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的程序,实现充JNI到java层的回调

    JavaAPI中文chm文档 part2

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

    nodejs调用建行互联网银企被扫支付接口加密及验签Demo+java封装jar包

    nodejs调用java可以通过child_process模块中的spawn()函数实现。 var spawn = require('child_process').spawn;  nodejsJava.encryptccbParam=function(flag,param,pubKey,callback){//必须传入4个参数}  

    java api最新7.0

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

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

    通过JNI接口静态注册的native方法去创建线程,同时提供native回调Java的方法。通过这个框架可以去实现线程监听某一个状态,然后回调Java的方法(如发消息去通知顶层,实现显示)

    java jdk-api-1.6 中文 chmd

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

    okhttp3.0二次封装(独立的3个java文件封装的)

    代码很简单,只有三个Java文件,建议下载后将Java文件拷贝到工程中使用。 封装的功能有: 一般的get请求 一般的post请求 一般的put请求 一般的delete请求 上传单个文件(包含进度) 上传list集合文件 上传map...

    Java中的functor实现

    文章来源:csdn 作者:wangfengsdu  经常听到回调函数(callback function)这个概念, 所谓回调函数,就是指这个函数先在某处注册,而它将在稍后某个需要的时候被调用。... C++中怎么来实现呢?当然,C++兼容C,用函数指

    oss文件上传(带回调)

    springboot + +oss + thymeleaf 实现的小demo , oss文件上传,根据oss链接生成二维码.

    设计模式Callback介绍与实例

    回调函数(callback Function),顾名思义,用于回调的函数。 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调...

    java事件处理机制ppt

    java事件处理机制ppt 有3种角色: 1.event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之...在windows程序设计里边这种相应使用callback机制来实现的

    GUI两个界面之间的的数据传递-参数传递方式.txt

    GUI两个界面之间的的数据传递-参数传递方式.txt 怎样才能实现两个gui界面之间的数据传递呀? 例如:有两界面:a,b ...我想在b中的一个按钮的callback下用数据x 怎么才能实现呢? 高手指导一下!!谢谢了!

Global site tag (gtag.js) - Google Analytics