这是《Java编程思想》中I/O系统一章中涉及的第一个例子,当时看第一眼,唯一的困惑就是出现在红色标注的代码部分。确实是,以前接触的太少,尤其是设计模式这一方面,对于回调函数又知之甚少。其实,遇到这种比较晦涩的代码,适当的分析list的源代码有助于对代码的理解。但是,貌似疑问从来都是从出不穷的,先抛开回调不说,且看accept()方法的参数。虽然由一个File形参,并且在list源代码中也传了一个this对象,但accept()方法貌似并没有使用的File对象。那么,我想请问File对象在这里是什么作用??????
import java.io.File;
import java.util.Arrays;
public class DirList {
}
public class DirFilter implements FilenameFilter {
}
list(FilenameFilter filter)源代码:
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0; i < names.length; i++) {
// here
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[]) (v.toArray(new String[v.size()]));
}