2013-04-17 6 views
7

Perché la mappa letterale di Groovy non ha una metaClass?Perché la mappa di Groovy non ha metaClass?

// lists work as expected: 
aList = [] 
println aList.class // class java.util.ArrayList 
println aList.metaClass // gives the full blown metaclass 
      //  [email protected] 
      //  [[email protected][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 

Testato con:

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

risposta

16

Devi usare:

[:].getMetaClass() 

Lo stesso che se si vuole ottenere il class di un Map, vale a dire:

[:].getClass() 

questo è beca usa Maps restituisce il valore rappresentato dalla chiave data quando esegui una ricerca di proprietà su di essi. Altrimenti non potresti avere le chiavi class o metaClass

+0

oh, hai proprio ragione! perché non ci avevo pensato prima? :) – elias

+0

Su un argomento correlato, esiste un modo per utilizzare missingProperty per una classe che implementa la mappa? Ok, posterò un'altra domanda ... – Philippe

+0

Vedi http://stackoverflow.com/questions/29042449/how-to-use-propertymissing-on-a-class-that-implements-java-util-map-in -groovy – Philippe

Problemi correlati