java中的回調

什麼是回調?

答:把方法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的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章