黑马程序员技术交流社区

标题: File功能列表方法代码的一点点疑问。。 [打印本页]

作者: 曹德君    时间: 2013-5-7 20:20
标题: File功能列表方法代码的一点点疑问。。
  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. }
复制代码

作者: Jacky_Chen1990    时间: 2013-5-7 20:30
  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对象之下的各种目录。

这是我自己的理解。欢迎指正,批评。教育!谢谢
作者: zms2100    时间: 2013-5-7 21:15
LZ指出的疑惑很经典,让我学到挺特别的东西。(附上图片,说的有点乱,希望能够帮助理解,以及学到东西,O(∩_∩)O~)

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

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

作者: 孙金鑫    时间: 2013-5-7 21:28
  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来标示,源代码是用一个数组装的文件名。。。
复制代码

作者: 曹德君    时间: 2013-5-7 22:16
我看了一下list的源码,也没看出他的具体是怎么实现的。希望能有能人继续解释一下。他源码里面的List是怎么整的。
作者: 黄玉昆    时间: 2013-5-12 22:21
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2