File f = new File(args[0]);
String[] list = f.list{new FilenameFilter() {
             public boolean accept(File f,String s) {
             return s.endsWith(".java");
}
}}这几句话创建了一个匿名类,accept()方式是测试文件s是否在文件列表f里,我不太明白这几句话的执行的先后顺序,是先创建一个匿名类,之后执行f.list()方法?还是怎样?我不太明白,请大家给指点一下!先谢谢了

解决方案 »

  1.   

    代码应该这样吧
    File f = new File(args[0]); 
    String[] list = f.list(new FilenameFilter() { 
      public boolean accept(File f,String s) { 
        return s.endsWith(".java"); 
      } 
    })
    当然先执行参数,然后才能传递参数
      

  2.   

    是的,先创建匿名类再执行list方法
      

  3.   

    先创建一个匿名类,执行类里的方法,取得返回值,返回值作为参数传入f.list()方法
      

  4.   


    import java.io.File;
    import java.io.FilenameFilter;
    class Filter implements FilenameFilter{ @Override
    public boolean accept(File dir, String name) {
        return name.indexOf(".exe")!=-1;
      }
    }

    public class Hello{
    public static void main(String[] args){
    File f=new File("C:\\WINDOWS");
    String[] name=f.list(new Filter());
    for (int i=0; i<name.length; i++) {
      System.out.println(name[i]);
    }
    }
    }相当于定义了一个过滤器实现了FilenameFiter接口,通过它的实现类构造对象时,都会过滤掉字符串
      

  5.   

    下面是list方法的源代码: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++) {
        if (filter.accept(this, names[i])) {
    v.add(names[i]);
        }
    }
    return (String[])(v.toArray(new String[0]));
        }从这可以看出,首先list方法需要一个对象实例,所以就先创建FilenameFilter的匿名实现类。
    然后再去执行这个匿名实现类的accept方法,实现过滤