Reflection 在Groovy对象中打印变量和值

Reflection 在Groovy对象中打印变量和值,reflection,groovy,Reflection,Groovy,如何打印Groovy对象的(公共和内部)变量及其值 即 应该给 X, 10 Y, 5 Z, 3 这必须是一个动态的解决方案,即在运行时。你的意思是这样吗 def a = "Hi" a.properties.each { println "$it.key -> $it.value" } 给出: class -> class java.lang.String bytes -> [72, 105] empty -> false [编辑] 根据您编辑的问题,这将为您提供:

如何打印Groovy对象的(公共和内部)变量及其值

应该给

X, 10
Y, 5
Z, 3
这必须是一个动态的解决方案,即在运行时。

你的意思是这样吗

def a = "Hi"

a.properties.each { println "$it.key -> $it.value" }
给出:

class -> class java.lang.String
bytes -> [72, 105]
empty -> false
[编辑]

根据您编辑的问题,这将为您提供:

class -> class X
y -> 5
metaClass -> org.codehaus.groovy.runtime.HandleMetaClass@16de4e1[groovy.lang.MetaClassImpl@16de4e1[class X]]
x -> 10
我认为不可能在运行时得到Z值。。。我能想到的唯一方法就是通过AST…

dump()

比如说

println "ddd".dump()
印刷品:

java.lang。String@2ef900value=dddd offset=0 count=4 hash=3078400


拥有一个可以调用对象本身的函数是很方便的,但不是现成的。如果您不介意污染
对象
元类上的名称空间,您可以使用以下内容对其进行修补:

Object.metaClass.printit { -> println org.codehaus.groovy.runtime.InvokerHelper.toString(delegate) }
'asdf'.printit() // prints 'asdf'

printit
不是最伟大的名字,但是
print
println
dump
都被取了。

你是在说反射吗?dump()不打印,它返回一个字符串。您需要打印结果。i、 e.println“ddd”.dump()
Object.metaClass.printit { -> println org.codehaus.groovy.runtime.InvokerHelper.toString(delegate) }
'asdf'.printit() // prints 'asdf'