什么是回调?
答:把方法a作为参数专递给方法b,由b去调用a。
没错,记住这句话就可以了。
回调在JavaScript中
上面的结论在JavaScript中比较好理解,因为在JavaScript中,方法就是对象,可以很方便的传给另一个方法作为参数。
在JavaScript中回调多用在资源请求
在java中,方法不是对象,无法被传给方法,该怎么理解?
先看下面两段代码(出自java编程思想 io)
//: io/DirList.java
// Display a directory listing using regular expressions.
//{Args: "D.*\.java"}
package org.qqwe.file;
import java.io.File;
import java.util.Arrays;
/**
* @author 王阳明的徒弟
*/
public class DirList {
public static void main(String[] args) {
File path = new File(".");
String[] list;
if (args.length == 0) {
list = path.list();
} else {
list = path.list(new DirFilter(args[0]));
}
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for (String dirItem : list) {
System.out.println(dirItem);
}
}
}
public class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
}
第一段 代码的list带参方法,接受一个实现FilenameFilter接口的对象。下面的类实现了这个接口,重写了accept方法。
这个list方法在执行的时候会去执行传入对象的accept方法,这就是回调,更具体来说,这是一个策略模式,所谓策略,就是方法,完成一个目标的方法。比如我要杀一个人,杀人是目标,是用大招击杀,还是用平a击杀,这就是方法,即策略。在写我 要杀人这个方法时,把策略给留出来,作为参数来获取,即策略模式。
结论
在java中,通过把一个对象传递给方法a,让a去调用对象的方法b,这就是回调。没什么nb的。