使用@CompileStatic进行命名参数编译失败-如何解决?

时间:2019-06-21 07:24:50

标签: groovy compile-static

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

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

但是将@CompileStatic添加到类中时会出现错误,类似

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

这里的问题是Map参数吗?

编辑 buildDirectory的类型为java.io.File,并已注入。

1 个答案:

答案 0 :(得分:1)

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

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的子类。