java回调函数
来源:互联网 发布:宜信数据挖掘工程师 编辑:程序博客网 时间:2024/05/20 20:17
在C或者C++中回调函数的定义:程序A在调用一个函数B时,将自己的函数的地址作为参数传递给程序调用的函数B时(那么这个自己的函数A称回调函数)。图示如下:
Java中没有指针,不能传递方法函数的地址,一般采用接口回调实现。原理简介如下:首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象。控制器对象负责检查某个场景是否出现或某个条件是否满足。当此场景出现或此条件满足时,自动调用回调对象的已告知方法。
(1)可以举个现实生活中的例子:一读者想借《软件技术学习与实践》这本书,但这本书已被其他读者借走了。于是,读者与图书馆管理员间发生了以下对话:
读者:“我把我的电话号码告诉你,等书一到就马上通知我。”
管理员:“好的。另一读者把书还回来后,马上给您打电话,书我先帮您留着。”
在上述这个场景中,读者就是“回调对象”,管理员就是“控制器对象”,读者的电话号码就是“回调对象的方法”。
(2)代码示例。
A,创建一个回调接口ICallBack.java
- public interface ICallBack {
- void run();
- }
B,另一个TestNew.java中完成以下几步:
创建回调接口的实现类:
- class CallBackClass implements ICallBack{
- public void run(){
- System.out.println(System.currentTimeMillis());
- }
- } //完成接口中的抽象函数,打印当前系统时间(毫秒)
创建控制类:
- class Controller{
- public ICallBack CallBackObject = null; // 定义回调对象成员
- Scanner input = new Scanner(System.in); //从键盘读取输入
- public Controller(ICallBack obj){
- this.CallBackObject = obj; //给回调对象赋值
- }
- public void Begin(){
- while(input.next()!=null){
- CallBackObject.run(); //当键盘有输入,执行回调对象的函数
- }
- }
- }
主程序:
- public class TestNew {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Controller obj = new Controller(new CallBackClass()); //将回调对象示例传入控制器对象
- obj.Begin();
- }
- }
编译完成后,在console中输入字符时,就会回显诸如“1359989219187”的系统时间。
(3)综上,当一个interface作为一个函数A或类B构造函数的形参要new时,就构成回调了。就函数A这种情况举例,比如:
在camera.java中定义的有
- public class Camera {
- private FaceDetectionListener mFaceListener;
- .....
- public interface FaceDetectionListener
- {
- void onFaceDetection(Face[] faces, Camera camera);
- }
- public final void setFaceDetectionListener(FaceDetectionListener listener)
- {
- mFaceListener = listener;
- }
- .....
- }
则在实际使用中:
- protected Camera mCameraDevice = null;
- ..........
- mCameraDevice = CameraServiceUtil.openCamera(mContext,mCameraId);
- mCameraDevice.setFaceDetectionListener(new FaceDetectionListener() {
- public void onFaceDetection(Face[] faces, Camera camera) { //必须实现
- }
- }
参考原文:http://www.cnblogs.com/leon19870907/articles/2024077.html
- JAVA回调函数
- java回调函数
- Java回调函数
- Java 回调函数
- java回调函数
- Java 回调函数
- Java 回调函数
- Java回调函数
- Java回调函数
- java回调函数
- Java 回调函数
- Java 回调函数
- java回调函数
- Java 回调函数
- java 回调函数
- java回调函数
- java回调函数
- Java 回调函数
- 博客开张了
- (转)Microsoft Help Library 管理器安装-更改库位置-错误等总结
- 题目1439:Least Common Multiple
- IE证书查看工具
- uva 140 Bandwidth (下一个序列+判断)
- java回调函数
- 梯度下降算法的python实现
- UTC时间
- 分享几个STM32开发板的光盘资料
- Apache配置优化
- AnsiString类
- facebook面经onsite-201302
- 使用 Python 获取 Linux 系统信息
- prev + next选择器