什麼是回調?
答:把方法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的。