Java回调

来源:互联网 发布:下载wps0ff1ce软件 编辑:程序博客网 时间:2024/06/05 03:00

说明

类A的a()方法调用类B的b()方法
类B的b()方法执行完毕主动调用类A的callback()方法

  • Class A实现接口CallBack callback
  • class A中包含一个class B的引用b
  • class B有一个参数为callback的方法f(CallBack callback)
  • A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法
  • 然后b就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的callback()方法

接下来看一下回调的代码示例,代码模拟的是这样一种场景:老师问学生问题,学生思考完毕回答老师。

首先定义一个回调接口,即学生思考完毕告诉老师答案:

/** * 回调接口 */interface CallBack {    void printResult(int res);}
定义提问题的类

/** * 实现回调函数的类 */public class Ask implements CallBack {    private static Answer answer;    public Ask(Answer answer) {//持有被调用者的实例        this.answer = answer;    }    public void ask(int a, int b) {        answer.fun(this, a, b);    }    @Override    public void printResult(int res) {//被调用者执行完之后回调该方法        System.out.println("答案是:" + res);    }}
定义回答问题的类

/** * 执行完之后返回结果给回调对象 */public class Answer {    private int calc(int a, int b) {        System.out.println("让我想一想……");        return a + b;    }    public void fun(CallBack callBack, int a, int b) {        int res = calc(a, b);        callBack.printResult(res);    }}
测试

public class TestCallBack {    public static void main(String[] args) {        Ask ask = new Ask(new Answer());        ask.ask(3, 5);    }}
输出结果

让我想一想……
答案是:8

整体的流程如下: