在闭包内引用Map类型的属性时出错

时间:2016-04-04 04:17:34

标签: groovy closures compile-static

在下面的代码段中,为什么编译器会抱怨map属性而不是其他类型的属性:

import groovy.transform.CompileStatic

@CompileStatic
class TestMapInClosure {

    Map amap = [:]
    List alist = []
    Integer intval = 0

    Closure doFoo = {           
        this.amap['one'] = 'two'  // !! [Static type checking] - No such property
        this.alist.push(1)
        this.intval += 5
    }
}
如果我理解正确的话,闭包内的

this应该引用封闭类的实例。

注意:Groovy版本:2.4.5

1 个答案:

答案 0 :(得分:1)

看起来像CompileStatic注释中的错误,就像您将行更改为:

this.amap += [one:'two']

或者

this.amap.one = 'two'

然后它工作正常。由于[]地图访问器的语义,我猜测它。

您可以sumbit it as a bug查看是否可以修复