通俗的解释Java的回调机制:A类调用了B类中的方法C,方法C又反过来调用了A类中的方法D,方法D就是回调方法,这个机制就叫做CallBack.

假设存在计算器类Cal、学生小明类XiaoMing以及老师测试类Tea。

处理流程

  1. 老师布置作业给小明 Question(a,b)
  2. 小明调用计算器 new Cal().add(a,b,this)
  3. 计算器计算 int result = a + b;
  4. 计算器回调小明的Answer(result)方法

1、学生类XiaoMing

public class XiaoMing {

    void Question(int a ,int b){
        new Cal().add(a,b,this);
    }
    void Answer(int result){
        System.out.println("答案是" + result);
    }
}

2、计算器类Cal

public class Cal {
    void add(int a,int b, XiaoMing xiaoMing){
        int result = a + b;
        xiaoMing.Answer(result);
    }
}

3、老师测试类Tea

public class Tea{
    public static void main(String args[]){
        new XiaoMing().Question(2,3);
    }
}

上述例子中,回调函数是Answer(),为了好理解,把学生类和计算器类耦合在一起了,假设小红XiaoHong也需要使用计算器Cal,现在的代码是无法实现的,所以在实际开发中,学生小明类XiaoMing一般是继承某个接口,且回调函数常用接口作为参数,下面的例子是改进后的。


4、新增学生接口Stu

public interface Stu {
    void Question(int a, int b);
    void Answer(int result);
}

5、小明XiaoMing实现接口Stu

public class XiaoMing implements Stu{
    @Override
   public void Question(int a ,int b){
        new Cal().add(a,b,this);
    }
    @Override
    public void Answer(int result){
        System.out.println("答案是" + result);
    }
}

6、小红XiaoHong实现接口Stu

public class XiaoHong implements Stu{
    @Override
   public void Question(int a ,int b){
        new Cal().add(a,b,this);
    }
    @Override
    public void Answer(int result){
        System.out.println("答案是" + result);
    }
}

7、计算器类Cal
参数由类XiaoMing改为接口Stu

public class Cal {
    void add(int a,int b, Stu stu){
        int result = a + b;
        stu.Answer(result);
    }
}

8、老师测试类Tea

public class Tea{
    public static void main(String args[]){
        new XiaoMing().Question(2,3);
        new XiaoHong().add(123,456);
    }
}

标签: Java, 回调, callback

添加新评论