`

JAVA通过接口来实现CALLBACK

    博客分类:
  • java
阅读更多

在网上看了好多关于java回调的文章,自己总结了一下(个人意见,仅供参考):

JAVA通过接口来实现CALLBACK。  
  例:  
  1.class   A,class   B  
  2.class   A实现接口operate  
  3.class   B拥有一个参数为operate接口类型的函数test(operate   o)  
  4.class   A运行时调用class   B中test函数,以自身传入参数  
  5.class   B已取得A,就可以随时回调A所实现的operate接口中的方法

=========================================================================

接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法。

==========================================================================

概括一句:回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。

===========================================================================

借用John D. Mitchell的例子应该比较好理解


在MS-Windows或者X-Window系统的事件驱动模型中,当某些事件发生的时候,开发人员已经熟悉通过传递函数指针来调用处理方法。而在Java的面向对象的模型中,不能支持这种方法,因而看起来好像排除了使用这种比较舒服的机制,但事实并非如此。

Java的接口提供了一种很好的机制来让我们达到和回调相同的效果。这个诀窍就在于定一个简单的接口,在接口之中定义一个我们希望调用的方法。

举个例子来说,假设当一个事件发生的时候,我们想它被通知,那么我们定义一个接口:

public interface InterestingEvent
{

    
// This is just a regular method so it can return something or

    
// take arguments if you like.

    
public void interestingEvent ();

}

这就给我们一个控制实现了该接口的所有类的对象的控制点。因此,我们不需要关心任何和自己相关的其它外界的类型信息。这种方法比C函数更好,因为在C++风格的代码中,需要指定一个数据域来保存对象指针,而Java中这种实现并不需要。

发出事件的类需要对象实现InterestingEvent接口,然后调用接口中的interestingEvent ()方法。

public class EventNotifier
{

    
private InterestingEvent ie;

    
private boolean somethingHappened; 

    
public EventNotifier (InterestingEvent event)
    
{

        
// Save the event object for later use.

        ie 
= event; 

        
// Nothing to report yet.

        somethingHappened 
= false;

    }
 

    
//  

    
public void doWork ()
    
{

        
// Check the predicate, which is set elsewhere.

        
if (somethingHappened)
        
{

            
// Signal the even by invoking the interface's method.

            ie.interestingEvent ();

        }


        
//
    }
 

    
// 

}

在这个例子中,我们使用了somethingHappened这个标志来跟踪是否事件应该被激发。在许多事例中,被调用的方法能够激发interestingEvent()方法才是正确的。

希望收到事件通知的代码必须实现InterestingEvent接口,并且正确的传递自身的引用到事件通知器。

public class CallMe implements InterestingEvent
{

    
private EventNotifier en; 

    
public CallMe ()
    
{

        
// Create the event notifier and pass ourself to it.

        en 
= new EventNotifier (this);

    }
 

    
// Define the actual handler for the event.

    
public void interestingEvent ()
    
{

        
// Wow!  Something really interesting must have occurred!

        
// Do something

    }
 

    
//

}


分享到:
评论

相关推荐

    Java Android用接口实现广播通知

    在这个场景中,我们讨论的是如何利用Java接口来实现广播通知,使得当某个事件发生时,可以及时通知到应用程序的不同界面进行数据刷新或状态更新。这种设计模式在Android中非常常见,特别是在处理异步操作或者系统级...

    java CallBack(回调函数)

    总结一下,Java回调函数是通过接口实现的一种设计模式,允许对象间相互通信和协作。这种机制在处理异步操作、事件驱动编程以及需要在特定条件满足后执行特定操作的场景下尤其有用。理解并熟练运用回调函数能够帮助...

    java接口回调

    当我们谈论“Java接口回调”时,核心思想是:一个类通过实现特定接口,将自身的某个方法暴露给其他对象调用,当特定事件发生或任务完成时,调用这个暴露的方法进行后续处理。 接口回调在Java中的应用广泛,例如在...

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

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

    JAVA_API1.6文档(中文)

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

    callBackExample

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

    RMI CallBack

    总结来说,"RMI CallBack"是Java中一种高级的分布式编程模式,它扩展了RMI的功能,使得服务器能够主动与客户端交互,提升了系统的灵活性和实时性。在实现过程中,需要理解并掌握RMI的原理,以及如何设计和实现回调...

    Callback回调接口学习demo

    在这个"Callback回调接口学习demo"中,我们将深入理解回调接口的工作原理,并通过实际示例——一个Fragment控制Activity中View的变化来学习如何实现它。 回调接口的基本概念是,一个类(调用者)注册了另一个类(被...

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

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

    java中回调函数的简单实现

    在Java中,回调函数通常通过接口来实现。我们定义一个接口,该接口包含一个或多个方法,这些方法将在适当的时候被调用。例如,我们可以创建一个名为`Callback`的接口: ```java public interface Callback { void ...

    匿名内部类实现接口回调

    这个"匿名内部类实现接口回调"的示例旨在演示如何通过匿名内部类来简化回调函数的实现。下面我们将详细探讨接口回调的概念、匿名内部类的使用以及它们在实际编程中的应用。 首先,让我们理解什么是接口回调。接口回...

    接口回调demo

    在Java编程中,接口回调是一种常见的设计模式,用于实现对象之间的通信和事件处理。当我们谈论“接口回调”时,我们通常是指一个类实现了接口,并在特定条件下调用接口中的方法来通知其他对象某个操作已完成或者发生...

    JNI 回调函数 Callback

    4. **实现回调**:在C/C++代码中,当需要触发回调时,使用`CallVoidMethod`等函数调用Java接口的相应方法。 **注意事项** 1. **线程安全**:Java和C/C++运行在不同的线程中,因此在多线程环境下,需要处理好同步...

    android 接口回调

    在本示例"android 接口回调"中,我们可能看到一个简单的应用场景,如一个Activity启动了一个Service,通过接口来接收Service执行完毕的通知。 首先,我们需要理解什么是接口(Interface):在Java中,接口是定义...

    JNA 转java接口以及指针结构体解析

    在"JNA 转java接口以及指针结构体解析"这个主题中,我们将深入探讨如何使用JNA来处理C语言中的结构体和指针。 首先,理解JNA的基本工作原理至关重要。JNA通过定义一个`Interface`,该接口中的方法对应于要调用的...

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

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

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

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

    hello-jniCallback_jni_android_

    - Android NDK提供了`JNIEnv`指针,它是JNI接口的实现,通过它来访问Java对象、类、方法和字段。 4. **回调机制**: - 在JNI中实现回调,通常需要在C/C++代码中定义一个函数指针类型,表示Java端的回调方法。 - ...

Global site tag (gtag.js) - Google Analytics