代码改变世界

Java回调机制

2017-03-19 11:33  Self_made  阅读(275)  评论(0)    收藏  举报

回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,比较经典的回调方式:

  • class A实现接口CallBack callback,重写其中的某个方法D—— 背景1
  • class A中包含一个class B的引用b —— 背景2
  • class B有一个参数为callback的方法f(CallBack callback) —— 背景3
  • A的对象a调用B的方法 f(CallBack callback) —— A类调用B类的某个方法 C
  • 然后b就可以在f(CallBack callback)方法中调用A的方法 —— B类调用A类重写的接口中的方法D

下面通过例子来实异步回调机制。

首先建立一个接口

public interface Callback {

public void solve(String msg);
}

class A实现接口CallBack

public class A implements Callback {

private B b;//引用B的对象

public A (B b) {
this.b = b;
}

//通过这个方法问B问题
public void ask(String question) {
//这里用一个线程来表示异步
new Thread(new Runnable() {
@Override
public void run() {
//A调用B中的方法,在这里注册回调接口
b.answerQuestion(A.this, question);
}
}).start();
}

//这里A可以做一些其他的事情

//B知道答案后调用此方法告诉A,就是A的回调方法
@Override
public void solve(String s) {
System.out.println("答案是:" + s);
}

}

建立class B

public class B {

public void answerQuestion(call_back cb, String s){
System.out.println("A 的请求是:" + s);

try {
Thread.sleep(1000);
//做一些事情
} catch (InterruptedException ex) {
ex.printStackTrace();
}

String result = "这个";
//调用A中的方法,即B类反过来调用A的方法D
cb.solve(result);
}
}

新建一个测试类

public class Test {

public static void main(String[] args) {

B b = new B();
A a = new A(b);

a.ask("一个问题");
}

}