avg*_*tvs 12 groovy invoke dynamicmethod
在运行时,我正在获取类的方法名列表,我想调用这些方法.我理解如何从这里完成第一部分:http: //docs.codehaus.org/display/GROOVY/JN3535-Reflection
GroovyObject.methods.each{ println it.name }
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到的信息是如何在我抓住它的名字后再调用一个方法.
我想要的是到达这里:
GroovyObject.methods.each{ GroovyObject.invokeMethod( it.name, argList) }
Run Code Online (Sandbox Code Playgroud)
我似乎找不到正确的语法.上面似乎假设我已经重载了GroovyObject类的默认invokeMethod,这不是我想要的方向.
ata*_*lor 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')
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以直接使用该名称:
methodName = 'myMethod'
test."$methodName"('bar')
Run Code Online (Sandbox Code Playgroud)
avg*_*tvs 15
Groovy允许使用spread运算符进行动态方法调用以及动态参数:
def dynamicArgs = [1,2]
def groovy = new GroovyObject()
GroovyObject.methods.each{
groovy."$it.name"(staticArg, *dynamicArgs)
}
Run Code Online (Sandbox Code Playgroud)
参考这里
问题在这里回答.
| 归档时间: |
|
| 查看次数: |
16716 次 |
| 最近记录: |