黑马程序员技术交流社区
标题:
File功能列表方法代码的一点点疑问。。
[打印本页]
作者:
曹德君
时间:
2013-5-7 20:20
标题:
File功能列表方法代码的一点点疑问。。
import java.io.*;
class FileDemo2
{
public static void main(String[] args)
{
listDemo();
}
public static void listDemo()
{
File f = new File("D:\\java\\");
String[] arr = f.list(new FilenameFilter()
{
//这里不是很明白,f对象并没有作为参数dir传递给accept方法,为什么他能知道呢??dir的参数是什么时候传递进去的??
public boolean accept(File dir, String name)
{
System.out.println(dir+"..."+name);
//return name.endsWith(".java");
return false;
}
});
for (String name : arr )
{
sop(name);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
作者:
Jacky_Chen1990
时间:
2013-5-7 20:30
String[] arr = f.list(new FilenameFilter()
{
//这里不是很明白,f对象并没有作为参数dir传递给accept方法,为什么他能知道呢??dir的参数是什么时候传递进去的??
public boolean accept(File dir, String name)
{
System.out.println(dir+"..."+name);
//return name.endsWith(".java");
return false;
}
});
复制代码
首先要知道,这是佚名内部类的实现方式。f对象没有作为参数dir传递给accept方法,他为什么能够知道呢?因为是f对象本身调用的这个方法。所以就知道了。dir的参数是什么时候传递进去,一样的道理,是f对象调用的这个方法,那么dir也是寄生于f对象之下的各种目录。
这是我自己的理解。欢迎指正,批评。教育!谢谢
作者:
zms2100
时间:
2013-5-7 21:15
LZ指出的疑惑很经典,让我学到挺特别的东西。(附上图片,说的有点乱,希望能够帮助理解,以及学到东西,O(∩_∩)O~)
File类的文件比较器(类似集合比较器).JPG
(137.72 KB, 下载次数: 0)
下载附件
2013-5-7 21:15 上传
作者:
孙金鑫
时间:
2013-5-7 21:28
public boolean accept(File dir, String name)
{
System.out.println(dir+"..."+name);
//return name.endsWith(".java");
return false;
复制代码
下面是实现FilenameFilter接口中的accept方法的一部分:
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