2009-12-20 1 views
7

Perché è proprio quando ne ho bisogno, la proprietà "metaClass" di Groovy restituisce null. Esempio:Quando "metaClass" di Groovy restituisce null

import net.sf.json.groovy.JsonSlurper 


@Grab(group='net.sf.json-lib', module='json-lib', version='2.3', classifier='jdk15') 

def printMeta(obj) { 

    obj.metaClass.properties.each {println "Property: ${it.name}"} 
} 

def raw = /{"test":"this is a test"}/ 

def json = new JsonSlurper().parseText(raw); 
printMeta (json); 

so che JsonSlurper utilizza metaprogrammazione, quindi perché ottengo il seguente:

Caught: java.lang.NullPointerException: Cannot get property 'properties' on null object at MetaTest.printMeta(MetaTest.groovy:17) at MetaTest.run(MetaTest.groovy:24)

Sono tutti fuori di idee.

Grazie!

risposta

13

Non ho mai giocato con le cose JSON, ma in genere ciò accade quando si tenta di chiamare .metaClass su una mappa.

Se non conosco la classe che sto chiamando in anticipo, in genere chiamerò .getMetaClass(). Altrimenti questo tipo di cose mi mordono quando cerco di passare le mappe in giro come oggetti finti.

(Questa è la stessa ragione di solito si desidera chiamare .getClass() invece di .class per ottenere un oggetto Class.)

+0

Questo è accaduto a me anche se la metaclasse non è stato invocato su una mappa. Il tuo aiuto ha risposto risolvendo il problema. Grazie – ken