我试图在groovy中这样做
def results = new File(someDirectory).listFiles { it.name.startsWith 'foo'}
Run Code Online (Sandbox Code Playgroud)
但是,我得到了可以理解的错误:
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]
Run Code Online (Sandbox Code Playgroud)
我如何告诉它使用FileFilter?
我最后写了一些简单的java风格:
File[] files = someDir.listFiles( new FileFilter(){
@Override
boolean accept(File pathname) {
return pathname.name.startsWith("foo")
}
})
Run Code Online (Sandbox Code Playgroud)
您可以强制转换或强制关闭以指定您所指的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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |