it-swarm.com.de

Variablen und Werte in einem Groovy-Objekt ausdrucken

Wie kann ich die (öffentlichen und internen) Variablen und ihre Werte eines Groovy-Objekts ausdrucken?

I.e

class X
{
  def X = 10
  def Y = 5

  private void doPrivate()
  {
      def Z = 3
  }
}

Sollte geben

X, 10
Y, 5
Z, 3

Dies muss eine dynamische Lösung sein, d. H. Zur Laufzeit.

28
geejay

dump()

Zum Beispiel

"ddd".dump()

Drucke:

[email protected] value = dddd offset = 0 count = 4 hash = 3078400

77
Dónal

Du meinst so?

def a = "Hi"

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

Gibt:

class -> class Java.lang.String
bytes -> [72, 105]
empty -> false

[bearbeiten]

Mit Ihrer bearbeiteten Frage würden Sie Folgendes erhalten:

class -> class X
y -> 5
metaClass -> [email protected][[email protected][class X]]
x -> 10

Ich glaube nicht, dass es möglich ist, den Z-Wert zur Laufzeit zu erhalten. Die einzige Möglichkeit, die mir einfällt, ist der AST ...

32
tim_yates

Eine Funktion aufzurufen, die Sie für ein Objekt selbst aufrufen können, ist praktisch, aber nicht standardmäßig vorhanden. Wenn es Ihnen nichts ausmacht, den Namespace auf Objects Metaklasse zu verschmutzen, können Sie ihn mit einem der folgenden Patches versehen:

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

printit ist nicht der beste Name, aber print, println und dump werden alle übernommen.

0
Marty Neal