Защо картата на Groovy няма metaClass?

Защо литералната карта на 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 за клас, който имплементира map? Добре, ще пусна още един въпрос... - person Philippe; 14.03.2015
comment
Вижте stackoverflow.com/questions/29042449/ - person Philippe; 14.03.2015