通俗易懂地理解Java中的回调机制到底是咋回事
来源:互联网 发布:程序员必读书籍 知乎 编辑:程序博客网 时间:2024/05/01 15:43
这几天在做项目的时候再次遇到了需要使用java回调机制来解决问题。之前在做android开发时其实会经常用到,比如对一个button绑定一个监听器,实现onclick方法,这样当用户点击屏幕时,就会处罚这个onclick方法,进而执行我们所需要的操作。这个onclick方法就可以说是一个回调方法,这个监听器完成的就是回调过程。在android中,我只遇到过一次需要自己写监听器的时候,隔了好久,又忘记了,这次又通过在网上找了好多帖子,才搞明白回调是咋个意思。为了方便自己以后再复习,也为了帮助那些仍然搞不清楚这个问题的朋友,决定写个文章。
高大上的说,回调机制就是控制反转的一种表现形式,简单的说,回调机制就是“好莱坞法则”,即“不要给我打电话,因为我会给你打电话”。再简单一点,就是A类调用B类方法,B类又反过来调用A类的方法。那么要实现回调机制需要有两个类,以及一个接口,当然如果你的程序需要很多接口时,你也可以再用一个类,把这些接口放到这个类里面,方便管理。不难看出,
这里举一个例子:想象这样一个情景:
期末考试的现场,监考老师发令:开始考试,下课准时交卷。学生则开始答卷,答到一半的时候你看了一下表,发现还剩半个小时就收卷了。最后下课铃响,老师发令:时间到了,从后往前收卷!
下面,我们来分析一下这个过程。在整个考试过程中,老师完成的工作是告诉学生开始考试和收卷的工作。学生则完成了答卷子和交卷的工作。这一过程中老师收卷这一动作的触发条件自然是时间到了,或者有学生提前交卷。收卷这个方法就是一个回调方法。下面我们通过代码进一步理解一下。
/** * Created by ALexHao on 16/12/22. * * 这是一个接口的集合的类,当然不用类来管理也可以。 */public class callbackset { //callback1接口 public interface callback1{ //教师收卷的回调方法 void shoujuan(); }}
/** * Created by ALexHao on 16/12/22. * * 学生类 */public class student { //接口的声明与初始化 callbackset.callback1 callback = null; public void setcallback(callbackset.callback1 callback){ this.callback = callback; } //模拟答卷子方法 //简单的计数器,数到一半时给予提示 public void dajuanzi(){ this.callback = callback; for(int i=0;i<100000;i++) { if(i==50000) System.out.println("还剩办个小时就要下课了。。"); } //时间到要交卷 jiaojuan(); } //交卷方法,时间到了学生交卷,通知老师收卷 public void jiaojuan(){ System.out.print("时间到了!"); this.callback.shoujuan(); }}/** * Created by ALexHao on 16/12/22. * * 教师类 */public class teacher{ //引用学生对象 student stu = null ; //传入参加本场考试的学生 public teacher(student stu) { this.stu = stu; } //发布开始考试的命令 public void kaishikaoshi(){ //学生设置回调接口,实现收卷的具体逻辑 stu.setcallback(new callbackset.callback1() { public void shoujuan() { System.out.println("从后往前收卷!"); } }); //新建线程 来执行答题过程 new Thread(new Runnable() { public void run() { System.out.println("开始考试,下课准时收卷!"); stu.dajuanzi(); } }).start(); }}/** * Created by ALexHao on 16/12/22. * * 主要的测试类 */public class maintest { public static void main(String[] args){ //学生入场 student stu = new student(); //教师入场 teacher tea = new teacher(stu); //教师发令:开始考试 tea.kaishikaoshi(); }}
在教师类中实现callback接口的另一种写法是使teacher类implement callback接口,这样就会出现熟悉的@override方法,在setcallback方法中只需要将teacher.this传入即可,效果相同。
希望通过这个简单的实例程序,可以帮助大家理解java当中的回调机制,如果我的描述中有任何欠妥的地方,欢迎大家批评指正~~
- 通俗易懂地理解Java中的回调机制到底是咋回事
- 通俗易懂理解Java回调机制
- 深入理解Java中的回调机制(最通俗易懂的回调机制的博客)
- 通俗易懂的例子解释Java回调机制
- 如何通俗易懂地理解皮尔逊相关系数?
- 关于java中的锁的理解(通俗易懂)
- 关于java中的锁的理解(通俗易懂)
- java中的回调机制(自己的一点理解)
- 通俗易懂解释java反射机制
- 理解java回调机制
- 理解Java回调机制
- 理解---Java回调机制
- 理解java回调机制
- 理解java回调机制
- 理解java回调机制
- 理解java回调机制
- 理解回调机制-java
- 理解java回调机制
- 二叉树的先序、中序、后序遍历的JavaScript表示
- compiler mirror not found
- Unity3D游戏开发之“重写Unity Android Splash,实现启动无黑屏”
- 三个数比较大小问题
- 特征选择算法之卡方检验
- 通俗易懂地理解Java中的回调机制到底是咋回事
- matlab BP神经网络分类
- Linux搭建svn服务器
- AndroidStudio快捷键
- svn安装
- 责任链模式
- maven Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar
- shell--输入目录名即可得到目录内文件的权限
- Android:内存溢出和内存泄漏的区别、产生原因以及解决方案