Почему у карты Groovy нет метакласса?

Почему у литеральной карты Groovy нет метакласса?

// lists work as expected:
aList = []
println aList.class // class java.util.ArrayList
println aList.metaClass  // gives the full blown metaclass
          //     org.codehaus.groovy.runtime.HandleMetaClass@3de6696c
          //     [groovy.lang.MetaClassImpl@3de6696c[class java.util.ArrayList]]

// string and numbers too:
println ''.metaClass
println 12.metaClass

// map does not:
aMap = [:]
println myMap.metaClass // gives null
println myMap.class // also gives null

Протестировано с:

Groovy Version: 1.8.6 JVM: 1.6.0_31 Vendor: Sun Microsystems Inc. OS: Linux

person Elias Dorneles    schedule 17.04.2013    source источник


Ответы (1)


Вы должны использовать:

[:].getMetaClass()

Так же, как если бы вы хотите получить class от Map, то есть:

[:].getClass()

это потому, что Карты возвращают значение, представленное данным ключом, когда вы выполняете поиск их свойств. В противном случае у вас не могло бы быть ключей class или metaClass

person tim_yates    schedule 17.04.2013
comment
По связанной теме, есть ли способ использовать missingProperty для класса, реализующего карту? Хорошо, я запрошу еще один вопрос ... - person Philippe; 14.03.2015
comment
См. stackoverflow.com/questions/29042449/ - person Philippe; 14.03.2015