A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李厚斌 中级黑马   /  2014-4-2 00:27  /  1558 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李厚斌 于 2014-4-3 03:16 编辑

File f=new File("g:\\11\\12333.txt");
//String[] list(FilenameFilter filter)  下面通过匿名内部类创建了FilenameFilter对象
搞不懂为么传递了对象进去。又没有指定参数列表里的参数什么的。就过滤了呢。
String[] arr=f.list(new FilenameFilter() {
                        
                        @Override
                        public boolean accept(File dir, String name) //可是这里又没有指定目录和名字只是复写了方法而已。怎么会起到过滤的作用的呢。。
                        {
                                // TODO Auto-generated method stub
                                if(name.endsWith(".java"))
                                        return true;
                                else
                                        return false;
                        }
                });

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

4 个回复

倒序浏览
那里面的目录和名字就是文件f的目录和名字 ,具体的调用应该是在调用的list里面吧  
回复 使用道具 举报
public String[] list(FilenameFilter filter) 的源码是调用了accept的

  1.     public String[] list(FilenameFilter filter) {
  2.         String names[] = list();
  3.         if ((names == null) || (filter == null)) {
  4.             return names;
  5.         }
  6.         List<String> v = new ArrayList<>();
  7.         for (int i = 0 ; i < names.length ; i++) {
  8.             if (filter.accept(this, names[i])) {
  9.                 v.add(names[i]);
  10.             }
  11.         }
  12.         return v.toArray(new String[v.size()]);
  13.     }
复制代码
回复 使用道具 举报
public static void main(String[] args) {
                File f=new File("c://myjava");
                String[] arr=f.list(new myfilter());
                for(int x=0;x<arr.length;x++){
                        System.out.println(arr[x]);
                }
                }
        }

class myfilter implements FilenameFilter{

        @Override
        public boolean accept(File dir, String name) {
                return name.endsWith(".java");
               
        }
因为你给list()方法传了一个过滤器,而list方法是由 f调用的,这样过滤器中的dir默认就是f所指定的路径,这就像在集合中你给容器本身传一个比较器一样
回复 使用道具 举报
list内部调用了过滤器的方法accept
你把FilenameFilter对象传进去的时候,就相当于把过滤的代码传进去了。所以就能过滤
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马