java 回调函数

java回调一般来说分为以下几步:
  1. 声明回调函数的统一接口interface A,包含方法callback();
  2. 在调用类caller内将该接口设置为私有成员private A XXX;
  3. 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形参传入caller的XXX);
  4. caller的某个方法dosth()中会用到XXX.callback()方法;
  5. 在caller的实例中,先实现A接口,后调用dosth()方法;

网上流行的例子: 
Java代码   收藏代码
  1. //回调函数接口及方法  
  2. public interface ICallback {   
  3.   public void   func();    
  4. }  
  5. //回调函数接口实现类  
  6. public class ClassWithCallbackFunction implements ICallback{  
  7.   public ClassWithCallbackFunction() {  
  8.   }  
  9.   public void func(){  
  10.     System.out.println("cccccccccccccccccc");  
  11.   }  
  12. }      
  13. public class Caller {  
  14.   private ICallback callback;  //私有接口成员        
  15.   public void setCallback(ICallback callback) {  
  16.     this.callback = callback;  //接口成员的实现:从外部传入  
  17.   }   
  18.   public void doCallback() {   //回调接口成员的方法  
  19.     callback.func();  
  20.   }  
  21.  }  
  22. }  
  23. public class MainClass {  
  24.   public MainClass() {  
  25.   }  
  26.   public static void main(String[] args) {  
  27.     Caller caller = new Caller();  
  28.     caller.setCallback(new ClassWithCallbackFunction() {  
  29.       public void func() {  
  30.         System.out.println("aaaaaaaaaa");  
  31.       }  
  32.     });  
  33.     caller.doCallback();      //实现回调  
  34.   }  
  35. }    
  36. //现实中是把doCallback()方法放在setCallback里调用,以上是为了说明回调原理  
  37. public class Caller {  
  38.   ICallback callback;  
  39.   public void doCallback() {  
  40.     callback.func();  
  41.   }  
  42.   public void setCallback(ICallback callback) {  
  43.     this.callback = callback;  
  44.     doCallback();  
  45.   }  
  46. }  



在C或者C++中回调函数的定义:

程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数)


Java中没有指针,不能传递方法的地址,一般采用接口回调实现把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。

实现回调的原理简介如下

首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象。控制器对象负责检查某个场景是否出现或某个条件是否满足。当此场景出现或此条件满足时,自动调用回调对象的方法

可以举个现实生活中的例子:

一读者想借《软件技术学习与实践》这本书,但这本书已被其他读者借走了。于是,读者与图书馆管理员间发生了以下对话:

读者:“我把我的电话号码告诉你,等书一到就马上通知我。”

管理员:“好的。另一读者把书还回来后,马上给您打电话,书我先帮您留着。”

在上述这个场景中,读者就是“回调对象”,管理员就是“控制器对象”,读者的电话号码就是“回调对象的方法”

详细的实例如下:

1、创建一个回调接口:

1  // 回调接口
2    public   interface  ICallBack
3 
4  void  run();
5  }

2、创建回调接口的实现类:

复制代码
1  class  CallBackClass  implements  ICallBack
2  { public   void  run()
3 
4    // 输出当前时间
5     System.out.println(System.currentTimeMillis() );
6  }
7  }
复制代码

3、创建控制类

复制代码
1  class  Controller
2  {
3  public  ICallBack CallBackObject  =   null ; //  引用回调对象
4  Scanner input  =   new  Scanner(System.in);  // 读取命令行输入
5  public  Controller(ICallBack obj)
6  {
7  this .CallBackObject  =  obj;
8  }
9  public   void  Begin()
10  {
11  while (input.next()  !=   null ) // 判断是否有输入
12  {
13  CallBackObject.run();
14  }
15  }
16  }
复制代码

运行程序:

复制代码
1  class  Program
2  {
3  static   void  Main(string[] args)
4  {
5  // 创建控制器对象,将提供给它的回调对象传入
6  Controller obj  =   new  Controller( new  CallBackClass());
7  // 启动控制器对象运行
8  obj.Begin();
9  }
10  }
复制代码

在控制器类中引用了回调对象,因此就能调用回调方法,当控制器进行某些判断之后(如:监听鼠标单击操作)就会自动调用回调方法!简易流程图如下:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值