导航

JAVA 回调

Posted on 2013-07-25 11:12  寒宵飞飞  阅读(508)  评论(0编辑  收藏  举报

一、定义   

    回调就是把函数指针做为参数传入,如函数A做为参数传入函数B,由B函数决定何时、何地调用函数A

     function A()

     function B(A)
    {
         call A()
     }

   就是把A传给B,由B决定什么时候调用。

 

二、用途

一个通俗的例子如下:

     你饿了,想吃饭,就一会去问你妈一声"开饭没有啊?"这就正常函数调用。但是今天你妈包饺子,,花的时间比较长,你跑啊跑啊,就烦了。于是你给你妈说,我先出去玩会,开饭的时候打我手机。等过了一阵,你妈给你打电话说"开饭啦,快回来吃饭吧!"。其中,你告诉你妈打手机找你,就是你把回调函数句柄保存到你妈的动作。你妈打电话叫你,就是个回调过程。

 

三、java中实现回调

     java中如何实现回调?答案是接口方式:

1、定义一个接口phone,妈妈通过这个接口来通知孩子

package test1;

public interface phone {
     public void eat();
}

2、定义一个孩子类,实现上面这个接口,供妈妈调用

package test1;

public class child implements phone
{
    public void eat()
    {
        System.out.println("孩子吃的很happy~~~");
    }
}

3、定义一个妈妈类

package test1;

public class mum {
     phone phone1;
     //将child作为参数传进来,这里传进来的实际是接口phone,由于child实现了phone,因此相当于将child作为参数传递了进来
     public void setCallback(phone phone1)
     {
         this.phone1 =phone1;
     }
        
     //通知child
     public void callChild() throws Exception
     {
         System.out.println("开始包饺子");
         Thread.sleep(3000);
         System.out.println("饺子包好了");
         
         System.out.println("打电话给孩子,过来吃饺子了");
         phone1.eat();
     }
     
     //主函数
     public static void main(String[] args) throws Exception
     {
         child child1=new child();
         mum mum1=new mum();
         mum1.setCallback(child1);
         mum1.callChild();
     }
}

 

运行mum类,输出如下:

开始包饺子
饺子包好了
打电话给孩子,过来吃饺子了
孩子吃的很happy~~~