`
sanqiandai
  • 浏览: 4515 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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;
  testReCall();
}

/**
  * 回调函数
  *
  * @author Ken_xu
  */
public void testReCall() {
  somethingHappened = true;
  doWork();
}

// ...
public void doWork() {
  // 检查在别处设置的谓词。
  if (somethingHappened) {
   // 通过调用接口的这个方法发出事件信号。
   ie.interestingEvent();
  }
  // ...
}

// ...
}



在上例中,我使用 somethingHappened 谓词来跟踪是否应触发事件。在许多情况下,调用此方法足以保证向 interestingEvent() 发出信号。

希望接收事件通知的代码必须实现 InterestingEvent 接口,并将自身引用传递给事件通知程序。

public class CallMe implements InterestingEvent {
private EventNotifier en;

public CallMe() {
  // 创建事件通知程序,并将自身引用传递给它。
  en = new EventNotifier(this);
}

int doNum = 0;

// 为事件定义实际的处理程序。
public void interestingEvent() {
  // 噢!必定发生了感受好的事件!
  // 执行某些操作 ...
  System.out.println("doNum=" + doNum++);
}
// ...
}


这就是所要做的全部工作。我希望这个简单的 Java 习惯用法会使您更有信心地转向 Java。
这里我补充一个测试函数
public class TestCallMe {

/**
  * @param args
  * @author Ken_xu
  */
public static void main(String[] args) {
  CallMe cm = new CallMe();
  System.out.println("====");
}

}

分享到:
评论

相关推荐

    java 回调函数 实现

    在Java编程中,回调函数是一种设计模式,它允许一个对象在另一个对象...在给定的示例中,`Button.java`和`OnButtonClickListener.java`展示了如何通过接口来实现回调,而`CallMeTest.java`则可能是测试回调功能的代码。

    java实现企业微信回调配置案例

    本案例将详细讲解如何使用Java来实现企业微信的回调配置,并提供相关的工具代码示例。 1. **企业微信API介绍** 企业微信提供了丰富的API接口,包括但不限于用户管理、部门管理、消息推送等。回调配置主要是通过...

    Java面试如何用Java实现一个回调函数

    Java面试如何用Java实现一个回调函数

    Java利用接口实现回调

    在Java支持方法指针之前,Java接口不能提供一种实现回调的好方法。如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧。  熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯...

    给初学者的java回调demo

    在Java中,实现回调有以下两种主要方式: 1. **通过接口**:创建一个接口,其中定义了回调方法。当需要回调时,将实现了该接口的对象作为参数传递给需要回调的类。当特定条件满足时,这个类就调用接口中的方法,...

    java中回调函数的简单实现

    下面我们将深入探讨回调函数的基本原理、应用场景以及如何在Java中实现回调。 首先,回调函数的主要优点是可以解耦代码,使得调用者和被调用者之间不直接依赖具体的实现。例如,在事件驱动的系统中,事件监听器就是...

    java自定义回调函数

    在Java中,我们可以使用接口或者匿名内部类来实现回调机制。 首先,我们需要理解什么是回调。回调是一种编程技术,当一个函数执行完毕后,它会调用另一个预先指定的函数,这个被调用的函数就是回调函数。在Java中,...

    [iOS]Objective-C利用协议实现回调函数(类似java的回调函数)

    在标题提及的“[iOS]Objective-C利用协议实现回调函数(类似java的回调函数)”中,我们主要讨论的是Objective-C如何通过协议(Protocol)来实现类似于Java中的回调函数功能。这种机制对于异步编程、事件处理以及...

    Java中回调方法使用范例

    1. **回调接口**:在Java中,回调机制通常通过定义一个接口来实现。这个接口会包含一个或多个待回调的方法。例如,我们可以定义一个名为`Callback`的接口,其中有一个`execute()`方法: ```java public interface ...

    java接口回调

    为了实现回调,这个类可能包含一个接口类型字段,表示回调接口: ```java public class MyThread extends Thread { private CallBack callback; // 定义回调接口引用 public void setCallBack(CallBack callback...

    微信企业号回调模式实例(Java版)

    本实例将聚焦于Java版本的实现,通过深入理解回调模式,我们可以更好地构建稳定、高效的微信企业号应用。 首先,我们要明白微信企业号回调的基本原理。当微信企业号接收到特定事件(如用户关注、取消关注、消息发送...

    Java中的回调使用

    首先,我们来看如何使用接口实现回调。假设有一个`Calculator`接口,它定义了一个`calculateDone`方法: ```java public interface Calculator { void calculateDone(int result); } ``` 然后创建一个`...

    java回调函数

    在Java中,回调函数通常通过接口来实现。当一个对象(如类A)调用另一个对象(如类B)的方法时,如果这个方法需要在完成之后执行特定的回调操作,那么类B可以要求类A提供一个实现了特定接口的对象。这个接口中定义的...

    Java多线程实现回调函数.txt

    Java多线程实现 自定义 的 回调函数. 手写 完成,亲测 完成,可以 直接运行,Demo ,具有一定参考价值,供大家阅读 下载,谢谢

    C++JNI多线程回调java

    总的来说,理解和实现"C++ JNI多线程回调java"涉及到对JNI接口的深入理解,对多线程编程的掌握,以及对Java并发模型的认识。这是一个高级的跨语言编程话题,需要开发者具备扎实的C++和Java基础。在实际项目中,这样...

    Java回调.rar

    回调是通过将一个方法的引用(或者在Java中,一个接口的实现)作为参数传递给另一个方法来实现的。当被调用的方法完成其主要任务后,它会调用传入的回调方法,从而启动后续的处理流程。 在Java中,回调通常与监听器...

    java 实现回调代码实例

    在Java中,由于没有像C++那样的函数指针,因此我们利用接口来实现回调功能。下面将详细介绍如何在Java中实现回调机制。 1. **定义回调接口** 在Java中,回调通常通过定义一个接口来实现。接口中声明了回调方法,当...

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

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

    C回调java几种方法

    "C回调Java方法"是指从C代码中调用Java的方法,这通常通过Java Native Interface(JNI)实现。JNI是Java平台标准的一部分,它提供了一套接口让Java代码能够调用本地(非Java)代码,反之亦然。本文将详细探讨C回调...

    微信支付-商户支付模式一url接口回调-java版

    在这个Java版的实现中,我们将探讨如何利用URL接口回调来处理支付流程。 首先,我们需要理解URL接口回调的基本概念。在微信支付中,当用户完成支付后,微信服务器会主动向商家设定的回调URL发送一个POST请求,携带...

Global site tag (gtag.js) - Google Analytics