对于回调函数,最常见的是出现在C语言的程序中,因为牵扯到指针问题,所以这块我也不是很懂,有关C的回调函数可以参考:
C语言回调函数的实例 详情请点击这里
回调函数是指使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。简单来说,就是由别人的函数运行期间来回调你实现的函数
在JAVA中,虽然没有指针指向回调函数的地址,可是Java有接口,用它也能实现回调函数:
举个栗子:
平常我们都会碰见难题或者BUG,在这个时候,我们自己不能解决,所以我们得向学霸去求救,当我们问学霸之后,学霸会思考解决方法,在这期间我们也不会等着学霸去解决难题,因为我们还有别的会做的题要去做,所以我们和学霸约定好:我们先去做别的事情,等到学霸解决之后学霸回来通知我们,这里的反过头来通知就是回调函数(俗称:CallBack)
public interface CallBack {
/*
*定义接口CallBack 用于回调函数,也可以扩充回调函数的种类和数量
*/
public void CallBack(boolean result);
}
/*
* 定义学渣类,实现CallBack接口
*/
public class PoorStudent implements CallBack{
/*
* 在类中封装学霸类的实例对象,并在构造函数中请求学霸解决问题
* 注意:这里传入的是this关键字,表示调用当前类的实例对象
* 这里封装学霸类的信息是为了可以通过该类对象也调用其他的属性
*/
SuperScholar superScholar;
public PoorStudent(SuperScholar superScholar){
superScholar.sloveQuestion(this);
}
/*
* 实现回调函数,给出调用接口
*/
@Override
public void CallBack(boolean result) {
if(result){
System.out.println("学霸解除了难题,打电话给学渣");
}else{
System.out.println("学霸出现了感情问题,让学渣等明天");
}
}
}
/*
* 学霸类,负责对学渣类的给出接口进行回调(在函数运行期间)
*/
public class SuperScholar {
public void sloveQuestion(CallBack callBack){
System.out.println("学霸在帮学渣问题");
int time=6;
/*
* 回调函数 回调PoorStudent的方法
* */
callBack.CallBack(caculate(time));
}
public boolean caculate(int time){
System.out.println(time+"分钟后...");
if(time<=10){
return true;
}else{
return false;
}
}
}
/*
* 测试类 首先需要学霸存在 在用学渣的构造函数通知学霸解决问题 学霸解决问题之后回头通知学渣
*/
public class Main {
public static void main(String[] args) {
SuperScholar sup=new SuperScholar();
new PoorStudent(sup);
}
}