2017-01-18 91 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)