groovy
2009-12-20 4257 views 7 likes 
7

Tại sao nó chỉ khi tôi cần nó, Groovy của "metaClass" tài sản trả về null. Ví dụ:Khi Groovy của "metaClass" trả về 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); 

Tôi biết rằng JsonSlurper sử dụng lập trình meta, vì vậy tại sao tôi nhận được như sau:

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

Tôi là tất cả ra khỏi ý tưởng.

Cảm ơn!

Trả lời

13

Tôi chưa bao giờ chơi với nội dung JSON chút nào, nhưng thường điều này xảy ra khi bạn đang cố gắng gọi .metaClass trên Bản đồ.

Nếu tôi không biết lớp tôi đang gọi trước, tôi thường gọi .getMetaClass() một cách cụ thể. Nếu không, loại điều này sẽ cắn tôi khi tôi đang cố gắng chuyển các bản đồ xung quanh như các đối tượng giả.

(Đây là lý do mà bạn thường muốn gọi .getClass() thay vì .class để có được một đối tượng Class.)

+0

này xảy ra với tôi dù metaclass không được viện dẫn trên bản đồ. Tuy nhiên, câu trả lời của bạn đã giúp giải quyết vấn đề. Cám ơn – ken

Các vấn đề liên quan