黑马程序员技术交流社区

标题: 关于FilenameFilter这个接口 [打印本页]

作者: 李挺    时间: 2013-2-27 17:26
标题: 关于FilenameFilter这个接口
  1. public static void listDemo_2()
  2. {
  3.   File dir = new File("d:\\java1223\\day18");

  4.   String[] arr = dir.list(new FilenameFilter() // 内部类
  5.   {
  6.    public boolean accept(File dir,String name)
  7.    {
  8.     return name.endsWith(".bmp");

  9.    }
  10.   });
复制代码
在file的方法里面有个方法是:list(FilenameFilter filter)
返回的是个String[]  由于FilenameFilter是一个接口
所以一般会在这个方法里面传入一个FilenameFilter的实例对象;
这个实例对象要复写accept方法,而且只要复写这一个方法;
那这个接口完全没有必要引入啊
直接在File类里面写个list(String str)方法,里面的代码和accept里面代码一样就可以了啊?

作者: 贾文泽    时间: 2013-2-27 17:52
看不懂你这代码怎么写的,不会是毕老师这样写吧,你都说FilenameFilter是个接口,那你在第五行把他new一下是什么意思?
作者: 李挺    时间: 2013-2-27 17:55
贾文泽 发表于 2013-2-27 17:52
看不懂你这代码怎么写的,不会是毕老师这样写吧,你都说FilenameFilter是个接口,那你在第五行把他new一下 ...

那个是匿名内部类
作者: 颜春    时间: 2013-2-27 17:56
accept方法是FilenameFilter接口中唯一的一个方法,是用来测试指定文件是否应该包含在某一文件列表中,  是以一定的条件来过滤文件。  要查看这些文件后缀名,一些不符合条件的文件将被 过滤掉 .
作者: lzw123451    时间: 2013-2-27 18:13
楼主的意思是说list(FilenameFilter filter)里面传个接口实例对象有点多此一举了,因为FilenameFilter filter在这里看来只有一个功能,那就是确定文件的过滤条件,那样的话,不如直接传个字符串来表示字符串的过滤条件,是吧。

其实是可以的,只要把Filename的 accept方法封装在list()方法里面,然后接受一个参数,这个参数代表过滤条件。
但过滤条件不一定是字符串,也可能是还有其他形式的条件,这样以一个字符串参数来代表多种过滤条件显然不太合适。
而且目前貌似只有list()用到了文件过滤器FilenameFilter ,但以后可能有更多的类更多的方法要用到这个过滤器,这样定义一个过滤器就比较合适了。

这只是我的个人见解,错误的请见谅。
作者: 李挺    时间: 2013-2-27 18:19
李志卫 发表于 2013-2-27 18:13
楼主的意思是说list(FilenameFilter filter)里面传个接口实例对象有点多此一举了,因为FilenameFilter filt ...

嗯,我是想知道这个接口是不是还有其他不为人知的功能
作者: 贾文泽    时间: 2013-2-27 18:54
李挺 发表于 2013-2-27 17:55
那个是匿名内部类

一时弄混淆了,又翻了一遍资料,弄清楚了,多谢提醒




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2