Распечатка переменных и значений в Groovy-объекте
Как я могу распечатать (публичные и внутренние) переменные и их значения объекта Groovy?
Т.е.
class X
{
def X = 10
def Y = 5
private void doPrivate()
{
def Z = 3
}
}
Должен дать
X, 10
Y, 5
Z, 3
Это должно быть динамическое решение, то есть во время выполнения.
3 ответа
dump()
Например
"ddd".dump()
Печать:
java.lang.String@2ef900 value = dddd offset = 0 count = 4 hash = 3078400
Вы имеете в виду, как это?
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...
Наличие функции, которую вы можете вызывать для самого объекта, удобно, но не существует из коробки. Если вы не возражаете загрязнять пространство имен на Object
Это метакласс, вы можете сделать это как-то так:
Object.metaClass.printit { -> println org.codehaus.groovy.runtime.InvokerHelper.toString(delegate) }
'asdf'.printit() // prints 'asdf'
printit
не лучшее имя, но print
, println
а также dump
все взято.