Java扩展FilenameFilter

时间:2017-12-06 11:35:57

标签: java filtering filenames

我有一个方法,在调用FilenameFilter时传递给(作为匿名内部类)。现在,如果设置了变量,我想扩展FilenameFilter。例如:

new FilenameFilter() {

    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".txt");
    }
}

应该成为:

new FilenameFilter() {

    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".txt") || new File(dir, name).isDirectory();
    }
}

如何从第一个过滤器获取过滤并添加目录检查? (我不想在调用方法时使用目录实现FilenameFilter,因为它可能根本不需要)

基于已接受答案的解决方案。 filenameFilter是传递给方法的实例:

new FilenameFilter() {

    @Override
    public boolean accept(File dir, String name) {
        return filenameFilter.accept(dir, name) || new File(dir, name).isDirectory();
    }
};

1 个答案:

答案 0 :(得分:1)

您应该扩展第一个过滤器:

class FilenameFilter1 implements FilenameFilter {
    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".txt");
    }
}

class FilenameFilter2 extends FilenameFilter1 {
    @Override
    public boolean accept(File dir, String name) {
        return super.accept(dir, name) && new File(dir, name).isDirectory();
    }
}