2017-12-06 32 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を実装したくないので、そのメソッドを呼び出すときには必要ありません)

解決策は受け入れられた答えに基づいています。 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'にこれを行う方法はありますか?ユーザーはそれを実装して拡張し、自分自身のフィルタ部分を追加しますか? – XtremeBaumer

+0

例のFilenameFilter1はFilenameFilterを実装しています –