Ошибка при ссылке на атрибут типа Map внутри замыкания

В следующем фрагменте кода, почему компилятор жалуется на атрибут 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 ответ

Решение

Похоже, ошибка в CompileStatic аннотация, как будто вы измените строку на:

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

Или же

this.amap.one = 'two'

Тогда все работает нормально. Я предполагаю, что это связано с семантикой [] карта доступа.

Вы можете представить это как ошибку и посмотреть, можно ли это исправить

Другие вопросы по тегам