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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.io.*;
  2. class  FileDemo2
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 listDemo();
  7.         }
  8.         public static void listDemo()
  9.         {
  10.                 File f = new File("D:\\java\\");
  11.                 String[] arr =  f.list(new FilenameFilter()
  12.                 {
  13.                         //这里不是很明白,f对象并没有作为参数dir传递给accept方法,为什么他能知道呢??dir的参数是什么时候传递进去的??
  14.                         public boolean accept(File dir, String name)
  15.                         {
  16.                                  System.out.println(dir+"..."+name);
  17.                                 //return name.endsWith(".java");
  18.                                 return false;
  19.                         }
  20.                 });
  21.                 for (String name :  arr )
  22.                 {
  23.                         sop(name);
  24.                 }

  25.         }
  26.         public static void sop(Object obj)
  27.         {
  28.                 System.out.println(obj);
  29.         }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
  1.     String[] arr =  f.list(new FilenameFilter()
  2.                 {
  3.                         //这里不是很明白,f对象并没有作为参数dir传递给accept方法,为什么他能知道呢??dir的参数是什么时候传递进去的??
  4.                         public boolean accept(File dir, String name)
  5.                         {
  6.                                  System.out.println(dir+"..."+name);
  7.                                 //return name.endsWith(".java");
  8.                                 return false;
  9.                         }
  10.                 });
复制代码
首先要知道,这是佚名内部类的实现方式。f对象没有作为参数dir传递给accept方法,他为什么能够知道呢?因为是f对象本身调用的这个方法。所以就知道了。dir的参数是什么时候传递进去,一样的道理,是f对象调用的这个方法,那么dir也是寄生于f对象之下的各种目录。

这是我自己的理解。欢迎指正,批评。教育!谢谢

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
LZ指出的疑惑很经典,让我学到挺特别的东西。(附上图片,说的有点乱,希望能够帮助理解,以及学到东西,O(∩_∩)O~)

File类的文件比较器(类似集合比较器).JPG (137.72 KB, 下载次数: 0)

File类的文件比较器(类似集合比较器).JPG

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1. public boolean accept(File dir, String name)

  2.                         {

  3.                                  System.out.println(dir+"..."+name);

  4.                                 //return name.endsWith(".java");

  5.                                 return false;

复制代码
下面是实现FilenameFilter接口中的accept方法的一部分:

  1.   if (filter.accept(this, names[i]))      //dir相当于调用了当前的路径,用this来标示,源代码是用一个数组装的文件名。。。
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
我看了一下list的源码,也没看出他的具体是怎么实现的。希望能有能人继续解释一下。他源码里面的List是怎么整的。
回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马