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的。


发布了16 篇原创文章 · 获赞 8 · 访问量 8500

猜你喜欢

转载自blog.csdn.net/qq_34637782/article/details/80910863