groovy - 如何在 Groovy 中动态调用方法?

标签 groovy invoke dynamicmethod

在运行时,我正在获取一个类的方法名称列表,并且我想调用这些方法。我了解如何从这里完成第一部分:
http://docs.codehaus.org/display/GROOVY/JN3535-Reflection

GroovyObject.methods.each{ println it.name }

我似乎无法找到有关如何在获取方法名称后调用该方法的信息。

我想要的是到达这里:
GroovyObject.methods.each{ GroovyObject.invokeMethod( it.name, argList) }

我似乎找不到正确的语法。以上似乎假设我已经重载了 GroovyObject 类的默认 invokeMethod,这不是我想要的方向。

最佳答案

一旦您收到 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')

关于groovy - 如何在 Groovy 中动态调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8715851/

相关文章:

java - Groovy - 对象重用。

json - Groovy:将数组转换为JSon

c# - 表达式树中的动态方法调用

c# - 如何从 DynamicMethod 获取 IL bytearray?

.net - 如何通过 ILGenerator.Emit* 调用 'normal' 方法?

pdf - 如何旋转文档页面以横向显示?

java - groovy代码测试java代码的代码覆盖率

mysql - 如何调用mysql中的存储过程?

java - 使用反射调用方法时传递什么对象

c# - 当方法信息仅在运行时已知时优化 MethodInfo.Invoke