当Groovy的“metaClass”返回null时

10

为什么在我需要时,Groovy的“metaClass”属性会返回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);
我知道JsonSlurper使用元编程,那么为什么我会得到以下结果:
抛出:java.lang.NullPointerException:无法在空对象上获取属性“properties” at MetaTest.printMeta(MetaTest.groovy:17) at MetaTest.run(MetaTest.groovy:24)
我已经没有更多的想法了。
谢谢!
1个回答

17

我从未使用过 JSON 相关的东西,但通常这种情况发生在您试图在 Map 上调用 .metaClass 时。

如果我事先不知道要调用的类,通常会特别调用 .getMetaClass()。否则,在将映射对象传递为模拟对象时,这种情况会让我困扰。

(这也是为什么通常希望调用 .getClass() 而不是 .class 来获取 Class 对象的原因。)


尽管 metaClass 没有在 Map 上调用,但这种情况也发生在我身上。不过你的回答帮助解决了问题。谢谢。 - ken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接