2017-01-18 7 views
1

Я хотел бы перечислить некоторые типы файлов и написал:Как отличить FileFilter и FilenameFilter от Groovy?

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) 
Смежные вопросы