Когда мета-класс Groovy возвращает ноль - PullRequest
9 голосов
/ 20 декабря 2009

Почему именно в то время, когда мне это нужно, свойство Groovy "metaClass" возвращает ноль. Пример:

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

Я знаю, что JsonSlurper использует метапрограммирование, так почему я получаю следующее:

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

У меня нет идей.

Спасибо!

1 Ответ

15 голосов
/ 20 декабря 2009

Я вообще никогда не играл с JSON, но обычно это происходит, когда вы пытаетесь вызвать .metaClass на карте.

Если я не знаю заранее, к какому классу я обращаюсь, я обычно вызываю .getMetaClass () специально. В противном случае, такие вещи кусают меня, когда я пытаюсь передать карты как фиктивные объекты.

(Это та же самая причина, по которой вы обычно хотите вызывать .getClass () вместо .class для получения объекта Class.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...