问题
Why does Groovy's literal map does not have a metaClass?
// 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
Tested with:
Groovy Version: 1.8.6 JVM: 1.6.0_31 Vendor: Sun Microsystems Inc. OS: Linux
回答1:
You have to use:
[:].getMetaClass()
The same as if you want to get the class
of a Map
, ie:
[:].getClass()
this is because Maps return the value represented by the given key when you do a property lookup on them. Otherwise you couldn't have keys class
or metaClass
来源:https://stackoverflow.com/questions/16061053/why-groovys-map-does-not-have-metaclass