回调函数:
个人理解为:方法B.b()存在的目的就在于让方法A.a()去调用,以达到方法A.a()所想要的效果。
public class DirList {
public static void main(String[] args) {
File path = new File(".");
String[] list;
if(args.length == 0)
list = path.list();
else
list = path.list(new DirFilter(args[0]));
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for(String dirItem : list)
System.out.println(dirItem);
}
}
//DirFilter存在的目的就是给list()提供accept()回调方法
class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) { //回调函数 在file.list中判断是否符合条件
return pattern.matcher(name).matches();
}
}
//path.list所使用的回调方法
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
List<String> v = new ArrayList<>();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i]) { //调用accept()方法
v.add(names[i]);
}
}
return v.toArray(new String[v.size()]);
}
回调函数一般采用接口的方法,也可能改造成匿名内部类的方式
public class DirList {
public static void main(String[] args) {
File path = new File(".");
String[] list;
if(args.length == 0)
list = path.list();
else
list = path.list(new FilenameFilter() {
private Pattern pattern;
@Override
public boolean accept(File dir, String name) {//回调函数 在file.list中判断是否符合条件
return pattern.matcher(name).matches();
}
});
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for(String dirItem : list)
System.out.println(dirItem);
}
}