Ошибка при ссылке на атрибут типа 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'
Тогда все работает нормально. Я предполагаю, что это связано с семантикой []
карта доступа.
Вы можете представить это как ошибку и посмотреть, можно ли это исправить