Проблема в том, что:
map["metaClass"]="c"
- это то же самое, что и запись:
map.metaClass = "c"
Я предполагаю, что перед делегированием методу Map.put(x,y)
он проверяет, существует ли метод setXxxx
на объекте.
Поскольку существует метод (в каждом объекте в Groovy) с именем setMetaClass()
, он затем вызывает этот метод вместо установки свойства на карте (и не может привести "c"
к объекту метакласса, как вы видели )
Обходные:
- Нет ключа под названием
metaClass
- Используйте
map.put( 'metaClass', 'c' )
вместо волшебной магии