之前看了网上很多讲回调的博客,说实话,很晕。
也许每个人都对回调有自己的理解。也许回调本来就是被赋予了多重的含义。就像中文中的多音字。每一个读法都有自己的意思。
这里介绍一种对回调的理解。应该也是最简单的一种。
回调按照字面意思来理解,可以理解为回头再调用。有人将回调称为钩子(Hook),就是指在写方法的时候,写了一半,不知道该怎么写了(可能会有很多种写法),那就在这里放一个钩子,然后接着往下写。回头来调用这个方法的时候,传入方法一个对象,将这个对象挂在钩子上,然后调用(回调)。可能说的不是很形象,来一个例子
public class CallBackTest1 {
public static void main(String[] args) {
Execute execute = new Execute();
execute.doWork(new ExecuteCallBack() {
@Override
public void execute() {
System.out.println("执行了select操作");
}
});
}
}
interface ExecuteCallBack {
void execute();
}
class Execute {
public void connect(){
System.out.println("connect successfully");
}
public void close(){
System.out.println("close successfully");
}
public void doWork(ExecuteCallBack callBack){
connect();
callBack.execute();
close();
}
}
我们看doWork方法,这可以认为是一个数据库查询方法。先要连接数据库,然后查询,最后释放连接。我们在写这个方法时,连接操作跟释放操作是确定的,但是具体的查询操作,我们这个时候是不确定怎么写的。所以在这里放一个钩子。等调用方法的时候,把对象传进来,就等于是勾住了。
以上只是一种对回调(callback)的理解。看了其他人的博客,有些比这种理解复杂很多。这种理解跟模板模式类似。这算是一家之言吧。