`
guojianhui0906
  • 浏览: 48254 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java接口实现回调的功能

    博客分类:
  • 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 习惯用法会使您更有信心地转向 Java。
分享到:
评论

相关推荐

    Java利用接口实现回调

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

    java 回调函数 实现

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

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

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

    接口回调实现简易购物车功能

    这样,我们可以通过实现这个接口并在适当的时候调用这个方法来实现回调逻辑。 购物车功能通常包括添加商品、删除商品、计算总价等功能。在回调的场景下,我们可以创建一个`ShoppingCart`类,负责管理这些操作。当...

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

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

    Java中的回调使用

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

    匿名内部类实现接口回调

    在Java编程中,接口回调是一种常见的设计模式,用于在对象之间传递异步事件或实现通信。这个"匿名内部类实现接口回调"的示例旨在演示如何通过匿名内部类来简化回调函数的实现。下面我们将详细探讨接口回调的概念、...

    C++JNI多线程回调java

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

    Java编程接口回调一般用法代码解析

    2. 接口的一大作用是实现回调,回调分同步回调和异步回调,区别是异步回调使用了多线程技术,当回调中有耗时操作时,就需要使用异步回调。 Java接口回调的优点: 1. 实现了面向对象的设计思想,符合开闭原则等。 2...

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

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

    Java中回调方法使用范例

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

    接口回调实现简易购物城功能

    在本场景中,我们关注的是如何利用接口回调实现一个简易的购物城功能。 首先,我们需要理解"接口"的概念。在编程中,接口定义了一组方法签名,但不提供具体的实现。类可以实现接口,从而承诺提供这些方法的实现。这...

    java 对接腾讯IM 聊天功能接口

    总之,Java对接腾讯IM聊天功能接口是一个涉及多方面技术的工作,需要理解并熟练运用SDK、网络通信、数据处理、回调机制等知识。通过合理的规划和实施,可以构建出稳定可靠的聊天功能,为用户提供优质的体验。

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

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

    接口回调demo完全解析

    在编程领域,接口回调是一种常见的设计模式,尤其在Java、C#等面向对象的语言中广泛使用。接口回调允许一个对象调用另一个对象的方法,而这个方法的定义在调用者中,而不是被调用者。这种模式使得代码更加灵活,能够...

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

    总之,Android中的JNI多线程编程和回调Java函数是一项重要的技能,它能有效利用多核处理器的性能,提高程序效率,并实现复杂的功能。理解并熟练运用这些技术,将有助于提升Android应用的性能和质量。

    微信支付回调工具类

    总之,微信支付回调工具类是实现微信支付功能的关键组件,它确保了商户服务器能正确处理微信支付服务器的回调,从而顺利完成交易流程。通过理解和掌握回调工具类的工作原理,开发者可以更加顺畅地实现微信支付功能,...

    Java/Android回调机制小示例

    在Java中,回调通常通过接口实现,而在Android中,除了接口,还可以利用匿名内部类或Lambda表达式。例如,当我们需要在某个任务完成之后执行一些操作,如网络请求成功后的数据处理,就会用到回调。 在Android开发中...

    JNI调用及回调就(Java&C) 源码

    在这个场景中,JNI被用来实现Java程序对摄像头的控制,以及处理来自C代码的回调。 首先,我们需要理解JNI的工作原理。JNI提供了一套接口,使得Java代码可以生成本地方法调用,这些方法可以是用C或C++编写的。在Java...

    java中的回调函数.docx

    - **实现回调**:创建一个实现回调接口的类(如`callee`),并重写接口中的方法。这样,当调用`call()`方法时,`callee`类的`fuc()`方法就会被调用。 3. **回调的使用场景**: 回调函数广泛应用于各种场景,如...

Global site tag (gtag.js) - Google Analytics