在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就 称为回调。在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃。
这样的解释似乎还是比较难懂,这里举个简 单的例子:
程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。目的达到。
在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数。
实现方式一:
假设我是程序员A,以下是我的程序a:
public class Caller {
public CallbackInterface cb;
public void setCallfuc(CallbackInterface cb) {
this.cb = cb;
}
public void call(){
cb.doSth();
}
}
我还需要定义一个接口,以便程序员B根据我的定义编写程序实现接口。
public interface CallbackInterface {
public void doSth();
}
于是,程序员B只需要实现这个接口就能达到回调的目的了:
public class B implements CallbackInterface{
public static void main(String []args){
Caller call = new Caller();
call.setCallfuc(new B());
call.call();
}
@Override
public void doSth() {
System.out.println("程序员a调用了程序b!");
}
}
实现方式二:
假设我是程序员A,以下是我的程序a:
public class Caller {
public CallbackInterface cb;
public Caller(CallbackInterface cb){
this.cb=cb;
}
public void call(){
cb.doSth();
}
}
我还需要定义一个接口,以便程序员B根据我的定义编写程序实现接口。
public interface CallbackInterface {
public void doSth();
}
于是,程序员B只需要实现这个接口就能达到回调的目的了:
public class B {
public static void main(String []args){
new Caller(new CallbackInterface() {
@Override
public void doSth() {
System.out.println("程序员a调用了程序b!");
}
}).call();
}
}