3

次のコード セグメントで、コンパイラが 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

4

1 に答える 1

1

CompileStatic行を次のように変更したかのように、注釈のバグのように見えます。

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

または

this.amap.one = 'two'

その後、正常に動作します。[]マップアクセサーのセマンティクスによるものだと思います。

バグとして提出して、修正できるかどうかを確認できます

于 2016-04-04T08:24:52.540 に答える