Android和Java中的回调函数
在 Android 的学习过程中遇到了回调函数,经过一段时间的理解,将自己的收获整理如下,希望对迫切希望了解这方面知识的同学有所启发。
回调函数的理解如下:
在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。
使用某一接口的实现类创建对象的引用赋值给该接口声明的接口变量,也就是多态的体现方式,那么这个接口变量就可以调用被类实现的接口的方法;通常开发过程中,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调
哈哈,是不是被上面的定义整蒙了,不要急,看完下面的代码后,再去看一遍这些冠冕堂皇的话^_^
我们设想一个场景:一位同学去找老师,想知道自己的数学成绩是多少,老师告诉他,现在成绩还没有出来,你可以先留下电话号码,成绩一旦出来,我马上电话告知你,学生留下电话走了,等了几天成绩出来了,老师找到该同学的电话号码,告诉他成绩很不错。
——在上面的场景中,电话号码就是回调函数,老师打电话就是在调用回调函数——
A(Student)类构成如下:
public class Student {//定义回掉接口的成员变量private CallBack callBack; //声明回调接口public interface CallBack{void work();} //设置回调接口对象成员变量public void setCallBack(CallBack c){this.callBack = c;} //调用回调接口对象中的方法public void doWork(){callBack.work();}
}
B(Teacher)类如下:
public class Teacher {public static void main(String[] args) {// TODO Auto-generated method stub Student stu = new Student();//(B类)设置接口对象,实现未实现的方法stu.setCallBack(new CallBack() { @Overridepublic void work() {// TODO Auto-generated method stubSystem.out.println("你的成绩出来了,考的不错!"); }});//(A类)实现方法的调用stu.doWork();}
}
如上便是回调函数的整个实现过程。
总结如下:为了实现方法的回调,需要定义一个A类,这个类中含有一个接口,接口中有未实现的方法,同时需要在本类中创建函数,这个函数来获取接口实例,还需要一个函数,来使用接口实例调用接口未实现的方法(此处不去实现)。在另一B类中,维护一个A类实例,使用A类实例调用A类中相应方法,来设置接口对象,实现未实现的方法,然后在B类中使用A类实例调用A类中的另一个方法,完成方法的回调
参考文档:
1. 马剑威-接口回调机制
2. 回调函数是什么?
3. Android回调函数机制那点事
Android和Java中的回调函数相关推荐
- Java中的回调函数学习-深入浅出
Java中的回调函数一般来说分为下面几步: 声明回调函数的统一接口interface A.包括方法callback(); 在调用类caller内将该接口设置为私有成员private A XXX; 在c ...
- java中函数的调用,java中如何调用函数
java动态调用函数,Java 中使用动态代码,java函数调用,java中如何调用函数 如何在 Java 中调用 C 函数 宗薇 [期刊名称]<网络新媒体技术> [年(卷),期]2000 ...
- java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...
Java代码的回调函数经常由框架或是系统定义,由程序开发人员填充. 它的最主要特点是即定义了调用的规范同时又非常的灵活. 回调函数有些类似于观察者模式,它们的区别在于:观察者模式返回的参数为Event ...
- 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile 构造函数及相关调用函数 | Android 源码中查找 native 函数 )
文章目录 一.DexFile 构造函数 二.DexFile.openInMemoryDexFile 函数 三.Android 源码中查找 native 函数 一.DexFile 构造函数 上一篇博客 ...
- java中的string函数_java中string.trim()函数的作用实例及源码
trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ String a=" hello world "; Str ...
- 理解与使用Javascript中的回调函数
在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被"存储"在变量中,能作为函数参数被传递,能在函数中被创建, ...
- Java中的split函数
Java中的 split 函数是用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回: String str="1234@abc"; String[] a = s ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- 关于javascript中的回调函数
关于javascript中的回调函数 原文地址:http://blog.csdn.net/sicluoyi/article/details/1737969 考虑一个这样的例子: 假如某个项目的底层和高 ...
最新文章
- 打造高效机房就这么简单(一)
- 索尼录音笔怎么导出录音内容_录音笔十大品牌名单出炉!录音笔十大品牌排名榜单揭晓!...
- 扒一扒TCP协议与UDP协议
- mysql多实例分配空间_mysql多实例的配置
- 游戏外挂设计技术探讨(上)
- catia装配体怎么把零件旋转180度_各种装配夹具,来看看适合你用的
- 网易云课堂-吴恩达机器学习-学习归纳-1-初识机器学习
- f2fs文件系统的页缓存
- FFmpeg基础:视频流转图片
- 电脑配置学习(台式机)
- 魔兽地图服务器修改,如何修改魔兽地图(傻瓜版)
- 后台打log(便于查看问题和调试)方法
- ios系统光遇是什么服务器,光遇什么时候合服?光遇国服安卓和IOS什么时候互通?...
- kettle源码分析之1启动流程(IDEA启动carte调试)
- 快速简单对接【短信验证码】API接口
- PTC creo 3.0 安装教程
- JavaWeb web.xml配置详解
- 微信小程序、app集成微信支付
- 基尔霍夫电压定律解析
- plt.imshow()中cmap参数控制颜色展示