【问题标题】:Retrieve Groovy Closure/Method parameters list检索 Groovy 闭包/方法参数列表
【发布时间】:2010-11-06 17:20:23
【问题描述】:

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

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

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

void method (String name,String id) {
 log.debug "Executing method with params name:${} id:${id}"
}

我读过一次关于引用闭包参数列表的方法,但我不记得了,查看Closure 的 groovy API 仅显示 getParametersType() 方法。至于方法,有一种方法可以将方法调用为闭包,然后我可以检索方法参数

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

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

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

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

    此外,我进行了广泛的 Google 搜索以追踪外星人。 ;-)

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

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

    嗯,这就是限制和选项!

    【讨论】:

      【解决方案2】:

      如果编译器包含调试符号,则可以检索参数名称,尽管不是通过标准 Java 反射 API。

      请参阅此帖子以获取示例 https://stackoverflow.com/a/2729907/395921

      【讨论】:

        【解决方案3】:

        我想你可能想看看 varargs http://www.javalobby.org/articles/groovy-intro3/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-29
          • 2012-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-27
          相关资源
          最近更新 更多