用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) {
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
Java NIO API详解
在JDK
1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API。对于大多数应用来说,这样的API使用很方
便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK 1.4起,NIO
API作为一个基于缓冲区,并能提供非阻塞(non-blo ......
在已经排好序的序列中查找待插入的元素的插入位置,并将待插入元素插入到有序列表中的过程。
将数组分成两部分,初始化时,前部分数组为只有第一个元素,用来存储已排序元素,我们这里叫 arr1 ;后部分数组的元素为除第一个元素的所有元素,为待排序或待插入元素,我们这里叫 arr2 。
排序时使用二层循环:第一 ......
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Arrays;
public class NumberChange
{
private String strNum;
private String strNumChFormat;
private String strNumT ......
我写了一个程序用来接收客户端发过来的数据,但是如果多个客户端一起像这里发送数据时,报StandardWrapperValve[xmlreceiver]: Servlet.service() for servlet xmlreceiver threw exception java.lang.OutOfMemoryError,这时需要扩大tomcat的java虚拟机内存,如何更改呢?
在 Windows菜单中找到Tomcat安装菜单中的Monitor ......