带有模糊闭包的groovy:如何解决

带有模糊闭包的groovy:如何解决,groovy,Groovy,我正试图在groovy中实现这一点 def results = new File(someDirectory).listFiles { it.name.startsWith 'foo'} 但是,我得到了一个可以理解的错误: groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.io.File#listFiles. Cannot resolve which method to invoke

我正试图在groovy中实现这一点

def results = new File(someDirectory).listFiles { it.name.startsWith 'foo'}
但是,我得到了一个可以理解的错误:

groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.io.File#listFiles.
Cannot resolve which method to invoke for [class change$_getRollback_closure1] due to overlapping prototypes between:
    [interface java.io.FileFilter]
    [interface java.io.FilenameFilter]
我如何告诉它使用带有FileFilter的

我最终以简单的java风格完成了它:

File[] files = someDir.listFiles( new FileFilter(){
    @Override
    boolean accept(File pathname) {
        return pathname.name.startsWith("foo")
    }
})

您可以强制或强制闭包以指定您所指的SAM类型/功能接口

// using a typecast:
def results = new File(someDirectory).listFiles((FileFilter) { it.name.startsWith 'foo'})

// using as keyword:
def results = new File(someDirectory).listFiles({ it.name.startsWith 'foo'} as FileFilter)

// using SAM-type coercion:
FileFilter ff = { it.name.startsWith 'foo'}
def results = new File(someDirectory).listFiles(ff)

这就是我要找的