检索Groovy Closure/Method参数列表

ken*_*ken 7 grails groovy

我们如何通过arguments数组以动态,javascript样式检索groovy中的闭包/方法的参数列表

例如,我想以这种方式记录消息

def closure = {name,id ->
 log.debug "Executing method with params name:${} id:${id}"
}
Run Code Online (Sandbox Code Playgroud)

要么

void method (String name,String id) {
 log.debug "Executing method with params name:${} id:${id}"
}
Run Code Online (Sandbox Code Playgroud)

我读过一次关于引用闭包参数列表的方法,但我没有回忆这一点,看看Closure的groovy API 只显示了getParametersType()方法.至于方法,有一种方法可以将方法作为闭包调用,然后我可以检索方法参数

rob*_*ert 2

你不会喜欢它(我希望做研究和回答不是我的错),但是:

没有API 可以访问 Groovy或 Java 中声明参数列表。ClosureMethod

我还研究了相关类型,包括(对于 Groovy)MetaClass和子类型,以及包中的类型org.codehaus.groovy.reflection,以及(对于 Java)包中的类型java.lang.reflect

此外,我还进行了广泛的谷歌搜索来追踪外星人。;-)

如果我们需要一个可变长度的闭包或方法参数列表,我们可以使用Object[]数组、 aListvarargs作为参数:

def closure = { id, Object... args ->
    println id
    args.each { println it }
}
closure.call(1, "foo", "bar")
Run Code Online (Sandbox Code Playgroud)

好吧,这就是限制和选择!