Grails 检索Groovy闭包/方法参数列表

Grails 检索Groovy闭包/方法参数列表,grails,groovy,Grails,Groovy,我们如何通过arguments数组动态检索groovy中javascript风格的闭包/方法的参数列表 例如,假设我希望以这种方式记录消息 def closure = {name,id -> log.debug "Executing method with params name:${} id:${id}" } 或 我曾经读过一篇关于引用闭包参数列表的方法的文章,但是我不记得了,并且我还查看了groovy API for启示only getParametersType()方法。至于方法

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

例如,假设我希望以这种方式记录消息

def closure = {name,id ->
 log.debug "Executing method with params name:${} id:${id}"
}

我曾经读过一篇关于引用闭包参数列表的方法的文章,但是我不记得了,并且我还查看了groovy API for启示only getParametersType()方法。至于方法,有一种方法可以将方法调用为闭包,然后我可以检索方法参数

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

没有API可以访问Groovy
闭包
或Java
方法
中声明的参数列表

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

此外,我在谷歌上进行了广泛的搜索以追踪外星人

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

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

这就是限制和选择

如果编译器包含调试符号,则可以检索参数名,但不能通过标准Java反射API进行检索


请看这篇文章中的示例

我想您可能想看看varargs

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