0

我这里有这段代码。(此代码取自 Thinking in Java 4th Edition)

//{Args: "D.*\.java}
import  java.util.regex.*;
import java.io.*;
import java.util.*;

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);
        }
    }
}

class DirFilter implements FilenameFilter{
    private Pattern pattern;
    public DirFilter(String regex){
        pattern = Pattern.compile(regex);
    }

    public boolean accept(File Dir,String name){
        return pattern.matcher(name).matches();
    }
}

然后当我阅读它的解释时,我遇到了这个

DirFilter存在的唯一原因是为方法提供accept( ) 方法,list( )以便list( )可以“回调”accept( ) 以确定哪些文件名应包含在列表中。因此,这种结构通常被称为回调。

Soo 回调具体是什么?

4

3 回答 3

4

回调是您提供给正在使用的库的方法,以便库可以调用您的方法来执行工作(或者更确切地说是回调您的代码,因此得名)。

更一般地说,任何两层代码都可以通过回调函数进行交互。

于 2012-08-07T03:41:27.807 回答
0

回调实际上只是一个您交给某个 API 的函数,然后该 API 在某些预期事件上调用该函数。例如,如果您正在使用一些网络 API,那么您可以发出异步发送请求以及在发送请求完成后将调用的回调。您可以使用该回调设置一些布尔值,让您知道如果/当您有任何新内容要发送时,您现在可以发送其他内容。

于 2012-08-07T03:41:11.413 回答
0

在 Java 的上下文中,为接口实现的方法将被视为回调。在您的代码中,DirFilter实现FilenameFilter具有接受方法。由于我们传递了一个DirFilterto list 方法的实例,因此该方法可以调用 accept 方法,尽管不知道它的实现。

于 2012-08-07T03:42:04.163 回答