在运行时我正在抓取类的方法名列表,我想调用这些方法。我理解如何从这里完成第一部分: http://docs.codehaus.org/display/GROOVY/JN3535-Reflection
GroovyObject.methods.each{ println it.name }
我似乎无法找到有关如何在获取其名称后调用方法的信息。
我想要的是到达这里:
GroovyObject.methods.each{ GroovyObject.invokeMethod( it.name, argList) }
我似乎无法找到正确的语法。上面似乎假设我已经重载了GroovyObject类的默认invokeMethod,这不是我想要的方向。
答案 0 :(得分:18)
从元类中获取MetaMethod
对象后,您可以在其上调用invoke
。例如:
class MyClass {
def myField = 'foo'
def myMethod(myArg) { println "$myField $myArg" }
}
test = new MyClass()
test.metaClass.methods.each { method ->
if (method.name == 'myMethod') {
method.invoke(test, 'bar')
}
}
或者,您可以直接使用该名称:
methodName = 'myMethod'
test."$methodName"('bar')
答案 1 :(得分:14)