Comment puis-je imprimer les variables (publiques et internes) et leurs valeurs d'objet Groovy?
C'est à dire
class X
{
def X = 10
def Y = 5
private void doPrivate()
{
def Z = 3
}
}
Devrait donner
X, 10
Y, 5
Z, 3
Cela doit être une solution dynamique, c'est-à-dire au moment de l'exécution.
Tu veux dire comme cela?
def a = "Hi"
a.properties.each { println "$it.key -> $it.value" }
Donne:
class -> class Java.lang.String
bytes -> [72, 105]
empty -> false
[modifier]
Avec votre question modifiée, cela vous donnerait:
class -> class X
y -> 5
metaClass -> org.codehaus.groovy.runtime.HandleMetaClass@16de4e1[groovy.lang.MetaClassImpl@16de4e1[class X]]
x -> 10
Je ne pense pas qu'il soit possible d'obtenir la valeur Z au moment de l'exécution ... La seule façon de le faire est de le faire via l'AST ...
Avoir une fonction que vous pouvez appeler sur un objet lui-même est pratique mais n’existe pas immédiatement. Si cela ne vous dérange pas de polluer l’espace de nommage sur la métaClass de Object
, vous pouvez le patcher avec un correctif semblable à ceci:
Object.metaClass.printit { -> println org.codehaus.groovy.runtime.InvokerHelper.toString(delegate) }
'asdf'.printit() // prints 'asdf'
printit
n'est pas le plus grand nom, mais print
, println
et dump
sont tous pris.