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); } }
以上是本人对回调机制的一点拙见,如有错误希望指出!多谢!