回调:就是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("一个问题");
}
}