2017-12-06 18 views
1

FilenameFilter을 호출 할 때 (익명 내부 클래스로) 전달되는 메소드가 있습니다. 이제 변수가 설정되면 FilenameFilter을 확장하려고합니다. 예 :Java expand 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을 구현하고 싶지 않다. 왜냐하면 전혀 필요하지 않을 수도 있기 때문이다.)

해결책은 대답을 기반으로한다.

new FilenameFilter() { 

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

답변

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(); 
    } 
} 
+0

'java.io.FilenameFilter'에이 작업을 수행 할 수있는 방법이를 filenameFilter은 메서드에 전달 된 인스턴스를 무엇입니까? 그래서 사용자는 그것을 구현하고 그것을 확장하고 내 필터 부분을 추가합니까? – XtremeBaumer

+0

예제에서 FilenameFilter1은 FilenameFilter를 구현합니다. –