Callback.pngjava的接口回调原理网上已经有很多生动形象的例子说明了,在此总结一下个人的理解:类A调用类B的方法b(),类B再回调类A的方法a(),其中方法a()是定义在接口中的,由类A来实现。这是一个双向调用的过程,用下面的类图来加以说明。
1. 创建一个接口:
public interface CallBack{
public void finish(String result);
}
接口定义了一个回调方法finish(),由类Manager实现,供类Employee回调。
2. 创建Manager类实现上面的接口
public class Manager implements CallBack{
private Employee employee;
public Manager(Employee employee){
this.employee = employee;
}
public void assign(){
System.out.println("to finish this work");
employee.get(Manager.this);
}
public void finish(String result){
System.out.println("well done..." + result);
}
}
Manager类是依赖Employee类的,它需要调用Employee类的get()方法,因此在Manager构造方法中将Employee对象作为参数传进来。之后在assign()方法中去调用employee的get()方法。最后记得要实现接口的回调方法finish();
3. 创建Employee类:
public class Employee{
public void get(CallBack callback){
new Thread(new Runnable(){
public void run(){
System.out.println("so easy!");
callback.finish("finish!");
}
}).start();
}
}
get()方法参数是接口,使用的时候直接传入Manager.this就可以了。在方法体中单独开启了一个线程,用来执行一些耗时的操作,这里只是简单的执行回调方法finish();
4. 最后编写一个类来测试一下
public class Main{
public static void main(String[] args){
Employee employee = new Employee();
Manager manager = new Manager(employee);
manager.assign();
}
}
在控制台中输出如下:
output.png
网友评论