当前位置: 首页 > 图灵资讯 > 技术篇> 用 Java 实现回调例程

用 Java 实现回调例程

来源:图灵教育
时间:2024-03-03 10:35:46

  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 (){// 噢!感兴趣的事件一定发生了!// 执行某些操作 ...}//...}