1、回调函数的定义
简而言之,回调函数就是使得内部函数(一般是库函数)可以调用外部函数(自定义函数)的过程。
2、C/C++下的回调函数
在C/C++语言中,指针是一个用来指向内存地址的变量。当程序运行时,所有与运行有关的对象都要加载到内存中,即与程序任何有关的任何对象都可以通过指针指向它。函数是存放在内存代码区域中,即可以通过指针来存取函数,把指向函数入口的指针称之为函数指针。
回调函数,即使用者自己定义一个函数并实现函数的功能,然后将这个函数作为参数传入到别人的函数中,但由别人在运行期间通过参数传递的方式调用。
带参的回调函数代码实例
//定义带参回调函数
void PrintfText(char* s)
{
printf(s);
}
//定义实现带参回调函数的"调用函数"
void CallPrintfText(void (*callfuct)(char*),char* s)
{
callfuct(s);
}
//在main函数中实现带参的函数回调
int main(int argc,char* argv[])
{
CallPrintfText(PrintfText,"Hello World!\n");
return 0;
}
3、Java下的回调函数
Java语言中不存在指针机制,无法通过函数指针的方式实现回调函数。Java支持Interface,通过Interface可以实现相同的回调,通过定义一个简单的interface,声明一个被希望回调的方法。
介绍经典的回调方式:
(1)调用类Caller实现接口CallBack;
(2)调用类Caller中有一个被调用类Callee的引用caller;
(3)被调用类Callee中有一个参数为callback的方法getMessage(CallBack callback);
(4)Caller的对象caller调用B的方法getMessage(CallBack callback)--类Caller调用类Callee的方法getMessage();
(5)对象callee可以在getMessage()方法中调用类Caller中的方法message();--类Callee中调用类Caller中的方法meissage();
示例代码
//回调接口
public interface CallBack {
public void message();
}
public class Caller implements CallBack {
//调用者caller中被调用者的引用
private Callee callee;
//构造函数
public Caller(Callee callee) {
this.callee = callee;
}
public Callee getCallee() {
return callee;
}
public void setCallee(Callee callee) {
this.callee = callee;
}
@Override
public void message() {
// TODO Auto-generated method stub
System.out.println("回调完成");
}
}
public class Callee {
//被调用者函数中需要有callback参数的方法
public void getMessage(CallBack callBack) {
callBack.message();
}
}
public class test {
public static void main(String[] args) {
//
Callee callee = new Callee();
//实现callback接口的调用者caller
Caller caller = new Caller(callee);
caller.getCallee().getMessage(caller);
}
}
以上是本人对回调机制的一点拙见,如有错误希望指出!多谢!