现有A、B两个类,两个类的实例a、b,A中实现a()方法,B中实现b()方法。
回调要求对象a在调用b对象的b()方法时,b()方法返回前需调用对象a的a()方法。
以管道通信传输为例,程序需要一边不停接收对端传来的数据并将接收到的数据进行处理,而又不影响主线程的进行。
假定现有2个接口:接收者,处理者
interface 接收者{
abstract void 不停接收(处理者 handler);
}
interface 处理者{
abstract void 数据处理(数据 info);
}
假定有2个实现了接口的类:我会接收、我会处理
class 我会接收 implements 接收者{
//实现接口中的抽象方法
public void 不停接收(处理者 handler){
//新建线程用于不停接收数据
new Thread(){
//一个实现了的接收方法 接收(),将管道中的数据拿出并返回
//若无数据将阻塞在此,等待数据
数据 info = 接收();
//数据接收完毕,调用handler对象的数据处理()方法
handler.数据处理(info);
}.start()
}
}
class 我会处理 implements 处理者{
//实现接口中的抽象方法
public void 处理数据(数据 info){
//将数据处理简化为输出数据
System.out.println(info);
}
public void 开始处理(接收者 receiver){
receiver.不停接收(this);
}
}
在主线程中接收并处理数据:
public class Demo{
public static void manin(String[] args){
我会处理 handler = new 我会处理();
我会接收 receiver = new 我会接收();
handler.开始处理(receiver);
//数据开始接收后,主程序继续循序执行代码
System.out.println("回调机制正在进行...");
}
}
上述代码中:
“我会接收”类为A类,handler为该类(我会接收)的一个实例看做a;
“我会处理”类为B类,receiver为该类的一个实例看做b;
“数据处理”看做A类中的a()方法;
“不停接收”看做B类中的b()方法。
对象a调用对象b的b()方法,b()方法循环调用a对象的a()方法,实现递归。