易截截图软件、单文件、免安装、纯绿色、仅160KB

用Java接口实现回调函数的等价功能

用Java接口实现回调函数的等价功能
首先,看一下回调函数的定义及起源:
简而言之,回调函数就是一个通过函数指针调用的函数,如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说是回调函数。
为什么要使用回调函数?
因为可以把调用者与被调用者分开。调用者不关心被调用者,所有它需要知道的,只是存在一个具有某种特定原型,某些限制条件(如返回值为int)的调用函数。
如果想知道回调函数在实际中有什么作用,先假设有一种情况,我们要编写一个库,它提供了某些排序算法的实现,如冒泡排序、快速排序、shell排序、shake排序等等,但为了使库更加通用,不想再函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;或者,想让库可用于多种数据类型(int, float, string),此时,该怎么办呢?可以使用函数指针,并进行回调。回调可用于通信机制,例如,有时要在程序中设置一个计时器,每到一定时间,程序会得到相应的通知,但通知机制的实现者对我们的程序一无所知,而此时,就需有一个特定原型的函数指针,用这个指针来进行回调,来通知我们的程序事件已经发生。
 
在Java支持方法指针之前,Java接口不能提供一种实现回调函数的好方法。熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯于传递在某种事件发生时调用(即 “回调”)的函数指针,Java的面向对象模型目前并不支持方法指针。
Java的接口支持提供一种获得回调的等价功能的机制。其技巧就是:定义一个简单接口,并在该接口中声明我们要调用的方法。
例如:假定我们希望在某个事件发生时得到通知。我们可以定义一个接口:
public interface InterestingEvent {
       // 这仅是一个常规方法。因此如果需要,
       //  它可以有返回值,也可接收参数
       public void interestingEvent();
}
这使得我们可以控制实现该接口类的任何对象。因此,我们不必关心任何外部类型的信息。
public class EventNotifer {
       private InterestingEvent ie;
       private boolean somethingHappened
       public EventNotifer(InterestingEvent event) {
      


相关文档:

Java模拟HTTP的Get和Post请求

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.URIException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.meth ......

用JAVA实现多线程(生产者与消费者问题)


public class MultiThread {
 public static void main(String[] args) {
  ProductStack box = new ProductStack("box");
  Producer p1 = new Producer(box, "p1");
  Producer p2 = new Producer(box, "p2");
  Producer p3 = new Producer(box, "p3");
 &nb ......

Java学习资料汇总

1.Java学习网站:
Java中文世界论坛        http://www.chinajavaworld.com/index.jspa
Java世纪网              http://www.java2000.net/
Java 中文站            http://www.java-cn.com/
Java学习室      ......

二。(2)Java数据层的配置文件

Hibernate在Spring配dataSource
S2SH整合   2008-09-12 15:25   阅读160   评论0  
字号: 大大  中中  小小
<!-- mysql数据源的配置 -->
<bean id="dataSource"
       class="org.apache.commons.dbcp.BasicDataSource ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号