2009-12-20 5 views
7

Pourquoi est-ce que juste quand j'en ai besoin, la propriété "metaClass" de Groovy renvoie null. Exemple:Lorsque "metaClass" de Groovy renvoie 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); 

Je sais que JsonSlurper utilise métaprogrammation, alors pourquoi dois-je obtenir ce qui suit:

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

Je suis tout d'idées.

Merci!

Répondre

13

Je n'ai jamais joué du tout avec le JSON, mais cela se produit généralement lorsque vous essayez d'appeler .metaClass sur une carte.

Si je ne connais pas la classe que j'appelle à l'avance, j'appelle généralement .getMetaClass() spécifiquement. Sinon, ce genre de chose me mord quand j'essaie de faire passer des cartes comme des faux objets.

(Ceci est la même raison que vous voulez généralement appeler .getClass() au lieu de .class pour obtenir un objet de classe.)

+0

Cela me est que le MetaClass n'a pas été invoqué sur une carte. Votre réponse a aidé à résoudre le problème. THX – ken

Questions connexes