您的位置:首页 > 编程语言 > Java开发

Java再学习-简单回调函数

2016-05-16 21:47 519 查看
   最近在研究Spring源码,其中有一个回调函数的概念,一直出现,而且出现的频率非常大,小编就查了好多资料,但是总是感觉不太实际,而且不容易理解,小编结合自己的事迹,结合生活,做了这么几段代码。

首先,回调函数,就是A类调用B类的方法C,然后B类反过来要调用A类中的方法D,这个D就是传说中的回调函数!感觉还是非常抽象,直接上例子吧。

回调函数接口:



package SpringCallback;
/**
* 这是一个回调接口
* @author xzp
*
*/
public interface CallBack {
/**
* 这个是小超考虑好以后要调用的函数告诉小徐,也就是回调函数
* @param result 是答案
*/
public void solve(String result);
}


其中一个类:

package SpringCallback;
/**
* 这个是小徐
* @author xzp
*
*/
public class Xu implements CallBack {
/**
* 小李对象的引用
* 相当于----->背景二
*/
private Xc xc;

/**
* 小徐的构造方法,持有小超的引用
* @param xc
*/
public Xu(Xc xc){
this.xc = xc;
}

/**
* 小徐通过这个方法去问小超的问题
* @param question  就是小徐要问的问题,做我女朋友好吗?
*/
public void askQuestion(final String question){
//这里用一个线程就是异步,
new Thread(new Runnable() {
@Override
public void run() {
/**
* 小徐调用小超中的方法,在这里注册回调接口
* 这就相当于A类调用B的方法C
*/
xc.executeMessage(Xu.this, question);
}
}).start();

//小徐问完以后,就去打篮球了。
play();
}

public void play(){
System.out.println("我要去打篮球了");
}

/**
* 小超考虑好后调用此方法告诉小徐,就是所谓的小徐的回调方法
*/
@Override
public void solve(String result) {
System.out.println("小超告诉小徐的答案是--->" + result);
}

}

另一个类:

package SpringCallback;
/**
* 这个就是小徐啦
* @author xzp
*
*/
public class Xc {
/**
*
* @param callBack
* @param question  小徐问的问题
*/
public void executeMessage(CallBack callBack, String question){
System.out.println("小徐问的问题--->" + question);

//模拟小超要睡觉了,加入睡了很长时间
for(int i=0; i<2000000000;i++){

}

/**
* 小超睡醒后想到的是 好,同意!!!
*/
String result = "好,同意!!!";

/**
* 于是就告诉小徐,调用小徐中的方法
* 这就相当于B类反过来调用A的方法D
*/
callBack.solve(result);

}

}

测试类:


package SpringCallback;
/**
* 测试类
* @author xzp
*
*/
public class Test {
public static void main(String[]args){
/**
* 实例化小超 new一个小超
*/
Xc xc = new Xc();

/**
* 调用小徐的构造方法,加上小超的引用
*/
Xu xu = new Xu(xc);

/**
* 小徐问小超的问题
*/
xu.askQuestion("做我女朋友好吗????");
}
}

执行结果:






上面只是一些自己的一些理解,关于回调函数,我个人理解还是有点欠缺,通过回调函数,两个类直接的沟通,相互不会产生太大的影响,完成调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: