2017-01-18 3 views
1

私は特定の種類のファイルを一覧表示したいと書いたでしょう:GroovyでFileFilterとFilenameFilterを区別するにはどうすればいいですか?

File[] imageFiles = srcDir.listFiles({ File file -> 
      file().name.endsWith("Artboard1ldpi.png") || 
      file().name.endsWith("Artboard1mdpi.png") || 
      file().name.endsWith("Artboard1hdpi.png") || 
      file().name.endsWith("Artboard1xhdpi.png") || 
      file().name.endsWith("Artboard1xxhdpi.png") || 
      file().name.endsWith("Artboard1xxxhdpi.png") 
     }) 

残念ながら、私は次のエラーを取得しています:

> Ambiguous method overloading for method java.io.File#listFiles. 
Cannot resolve which method to invoke for [class CLOSURENAME] due to overlapping prototypes between: 
    [interface java.io.FileFilter] 
    [interface java.io.FilenameFilter] 

を選択するかを、Groovyのヒントには?

答えて

3
File[] imageFiles = srcDir.listFiles({ File file -> 
    file.name.endsWith("Artboard1ldpi.png") || 
    file.name.endsWith("Artboard1mdpi.png") || 
    file.name.endsWith("Artboard1hdpi.png") || 
    file.name.endsWith("Artboard1xhdpi.png") || 
    file.name.endsWith("Artboard1xxhdpi.png") || 
    file.name.endsWith("Artboard1xxxhdpi.png") 
} as FileFilter) 
4

これはまた、DRYを動作するはずです;)

File[] imageFiles = srcDir.listFiles({ File file -> 
    [ 
     "Artboard1ldpi.png", 
     "Artboard1ldpi.png", 
     "Artboard1mdpi.png", 
     "Artboard1hdpi.png", 
     "Artboard1xhdpi.png", 
     "Artboard1xxhdpi.png", 
     "Artboard1xxxhdpi.png", 
    ].any { file.name.endsWith(it) } 
} as FileFilter) 
関連する問題