命名参数编译因@CompileStatic 而失败——如何解决?

Named parameters compilation fails with @CompileStatic - how to fix it?

这段代码在动态类型中完美运行Groovy

buildDirectory.traverse(type: FILES, nameFilter: ~/dependency-updates-report.xml/) {
    reports << it
}

但是在将 @CompileStatic 添加到 class 时出现错误,类似于

'traverse' in 'org.codehaus.groovy.runtime.ResourceGroovyMethods' cannot be applied to ...

Map参数是这里的问题吗?

EDIT buildDirectory 是 java.io.File 类型并被注入。

如果是这样的静态编译,您需要显式转换为:

buildDirectory.traverse([type: FILES, nameFilter: ~/dependency-updates-report.xml/] as Map) {
    reports << it
}

这里的问题是 File.traverse() 方法需要一个

类型的映射
Map<String, Object>

而 Groovy 惯用地图创建会创建

类型的地图
LinkedHashMap<String, Serializable>

这个Serializable在这里是个问题,因为它不是java.lang.Object的子类。