A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李挺 中级黑马   /  2013-2-27 17:26  /  2119 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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里面代码一样就可以了啊?

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

6 个回复

倒序浏览
看不懂你这代码怎么写的,不会是毕老师这样写吧,你都说FilenameFilter是个接口,那你在第五行把他new一下是什么意思?
回复 使用道具 举报
贾文泽 发表于 2013-2-27 17:52
看不懂你这代码怎么写的,不会是毕老师这样写吧,你都说FilenameFilter是个接口,那你在第五行把他new一下 ...

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

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

这只是我的个人见解,错误的请见谅。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
李志卫 发表于 2013-2-27 18:13
楼主的意思是说list(FilenameFilter filter)里面传个接口实例对象有点多此一举了,因为FilenameFilter filt ...

嗯,我是想知道这个接口是不是还有其他不为人知的功能
回复 使用道具 举报
李挺 发表于 2013-2-27 17:55
那个是匿名内部类

一时弄混淆了,又翻了一遍资料,弄清楚了,多谢提醒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马