2009-12-20 22 views
7

¿Por qué justo cuando lo necesito, la propiedad "metaClass" de Groovy devuelve null. Ejemplo:Cuando "metaClass" de Groovy devuelve nulo

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); 

sé que JsonSlurper utiliza metaprogramming, así que ¿por qué me sale el siguiente:

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

Estoy fuera de las ideas.

Gracias!

Respuesta

13

Nunca he jugado con JSON, pero esto suele ocurrir cuando intentas llamar a .metaClass en un mapa.

Si no conozco la clase a la que estoy llamando de antemano, usualmente llamaré a .getMetaClass() específicamente. De lo contrario, este tipo de cosas me pica cuando estoy tratando de pasar los mapas como objetos simulados.

(Esta es la misma razón por la que normalmente se quiere llamar .getClass() en lugar de .class para obtener un objeto de clase.)

+0

Esto me sucedió cuando el MetaClass no se invocó en un mapa. Tu respuesta me ayudó a resolver el problema. Gracias – ken

Cuestiones relacionadas