Java再学习-简单回调函数
2016-05-16 21:47
519 查看
最近在研究Spring源码,其中有一个回调函数的概念,一直出现,而且出现的频率非常大,小编就查了好多资料,但是总是感觉不太实际,而且不容易理解,小编结合自己的事迹,结合生活,做了这么几段代码。
首先,回调函数,就是A类调用B类的方法C,然后B类反过来要调用A类中的方法D,这个D就是传说中的回调函数!感觉还是非常抽象,直接上例子吧。
回调函数接口:
其中一个类:
另一个类:
测试类:
执行结果:
上面只是一些自己的一些理解,关于回调函数,我个人理解还是有点欠缺,通过回调函数,两个类直接的沟通,相互不会产生太大的影响,完成调用。
首先,回调函数,就是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("做我女朋友好吗????"); } }
执行结果:
上面只是一些自己的一些理解,关于回调函数,我个人理解还是有点欠缺,通过回调函数,两个类直接的沟通,相互不会产生太大的影响,完成调用。
相关文章推荐
- java基础第八天
- Java基础-第7天
- eclipse导入JDK源码
- spring 引入命名空间简介
- spring 数据连接泄漏
- spring数据连接泄漏
- Java面向对象之继承
- Java面向对象之多态
- 深入java之java语言基础(一)
- Java面向对象之多态
- Java中的反射机制复习
- spark学习11之在idea中将eclipse导入的java project改成maven project
- [疯狂Java]NIO.2:文件属性
- spring 获取 bean
- android开发使用eclipse遇到的问题
- java之StringTokenizer
- Java大数求解ACM(HDU)
- Java基础-第6天
- java堆与栈
- Spring框架的初步学习