嗯,我指的是 list = path.list(new DirFilter(args[0])); 对于DirFilter类产生的实例是如何自动调用accept方法的???

解决方案 »

  1.   

    import java.io.*;
    import java.util.*;public class DirListTest {
      public static void main(String[] args) {
        File path = new File("."); //新建File指向当前目录
        String[] list;
        if(args.length == 0) //如果运行时没有参数
          list = path.list(); //列举当前目录所有文件名存入 list 数组
        else  //如果运行时有参数(指定的文件后缀)
          list = path.list(new DirFilter(args[0]));
             //先将文件名传到内部类DirFilter(FilenameFilter)进行后缀过滤
             //然后将DirFilter返回满足条件的文件名存入数组 list
        for(int i = 0; i < list.length; i++)
          System.out.println(list[i]); //循环打印 list 内容
      }
    }class DirFilter implements FilenameFilter { 
         //DirFilter 继承 FilenameFilter 是一个文件过滤器
      private String ext; //一个 String 保存要求过滤的 后缀
      DirFilter(String aext) { ext = "." + aext; } //DirFilter的构造方法
      ///下面是关键,accept() 方法返回满足条件的文件名
      public boolean accept(File dir, String name) {
         return name.endsWith( ext ); //文件名由 ext 结尾的返回 true
      }
    }【对于DirFilter类产生的实例是如何自动调用accept方法的???】
    就像 Applet 的 init() 方法,这是默认的,
    所以继承FilenameFilter类的DirFilter的 accept() 方法也一样是默认的自动调用