浅谈接口回调

接口回调

最近遇到接口回调挺多的,例如Java Web中的Listener以及最近在回顾Java的基础知识File类里面的list(FilenameFilter)都用到了接口回调。那么我就从list(FilenameFilter filter)来浅析下接口回调

1.list(FilenameFilter filter)里的接口回调

*File类里面list的源码

public String[] list(FilenameFilter filter) {
    //获取该目录对象下的所有文件
    String names[] = list();
    if ((names == null) || (filter == null)) {
        return names;
    }
    //用于接收筛选后的文件的文件名
    List<String> v = new ArrayList<>();
    for (int i = 0 ; i < names.length ; i++) {

        //通过接口FilenameFilter去调用使用list方法实现FilenameFilter接口的类(即后面的匿名内部类)的accpet方法来筛选文件
        //如果accpet方法返回的是true就把该文件添加到所需文件集合中

        if (filter.accept(this, names[i])) {//filter.accept(this, names[i])这就是我们所说的接口回调
            v.add(names[i]);
        }
    }
    return v.toArray(new String[v.size()]);
}

*FilenameFilter的接口

public interface FilenameFilter {
    boolean accept(File dir, String name);
}

*我使用list方法对我所要获取的目录下的文件进行筛选

File file=new File("aaaa");
    if(file.isDirectory()) {            
        String[] name=file.list(new FilenameFilter() {//匿名内部类
            //实现接口FilenameFilter的accept方法,对后缀为.txt的文件进行筛选
            public boolean accept(File dir, String name) {
                File cFile=new File(dir, name);
                //如果文件名以.txt结尾则返回true,否则返回false
                if(cFile.isFile()&&name.endsWith(".txt")) {
                    return true;
                }
                return false;
            }
        });
        //输出.txt类型文件的文件名
        for (String filename : name) {
            System.out.println(filename);
        }

2.接口回调的实现原理

3.接口回调的使用场景

1.一些框架中提供了监听功能(如果有什么变化,来通知我)

2.一些类中过滤方法(满足什么条件,做什么操作)

3.在Android中监听功能非常常见

4.个人见解

在使用接口回调的时候,我们实现接口的类的时候,一般不会再去创建一个类来实现该接口的方法的逻辑,一般都使用匿名内部类。

1.没必要为了一个方法去创建一个类,项目不好管理
2.使用内部匿名类会使代码更有可读性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值