Reflection 在Groovy对象中打印变量和值
如何打印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 [编辑] 根据您编辑的问题,这将为您提供:
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'