web-dev-qa-db-ja.com

Groovyオブジェクトの変数と値を出力する

Groovyオブジェクトの(パブリックおよび内部)変数とその値を出力するにはどうすればよいですか?

つまり

class X
{
  def X = 10
  def Y = 5

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

与えるべき

X, 10
Y, 5
Z, 3

これは動的なソリューション、つまり実行時でなければなりません。

31
geejay

dump()

例えば

"ddd".dump()

プリント:

Java.lang.String@2ef900 value = dddd offset = 0 count = 4 hash = 3078400

77
Dónal

こんな感じ?

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経由です...

38
tim_yates

オブジェクト自体で呼び出すことができる関数があると便利ですが、すぐに使用できるわけではありません。 ObjectのmetaClassのネームスペースを汚染することを気にしないのであれば、次のようなものでパッチを適用できます。

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

printitは最大の名前ではありませんが、printprintln、およびdumpはすべて使用されます。

0
Marty Neal