Groovyオブジェクトの(パブリックおよび内部)変数とその値を出力するにはどうすればよいですか?
つまり
class X
{
def X = 10
def Y = 5
private void doPrivate()
{
def Z = 3
}
}
与えるべき
X, 10
Y, 5
Z, 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
のmetaClassのネームスペースを汚染することを気にしないのであれば、次のようなものでパッチを適用できます。
Object.metaClass.printit { -> println org.codehaus.groovy.runtime.InvokerHelper.toString(delegate) }
'asdf'.printit() // prints 'asdf'
printit
は最大の名前ではありませんが、print
、println
、およびdump
はすべて使用されます。