8

How do we retrieve the list of parameters of a closure/method in groovy dynamically, javascript style through the arguments array

say for example that i want to log a message this way

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

OR

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

I read once about a way to reference the list of parameters of a closure, but i have no recollection of that and looking at the groovy API for Closure reveals only getParametersType() method. As for the method, there is a way to call a method as a closure and then i can retrieve the method parameters

ken

ken
  • 3,745
  • 6
  • 34
  • 49

3 Answers3

2

You won't like it (and I hope it's not my bad to do research and to answer), however:

There is no API to access the list of parameters declared in a Groovy Closure or in a Java Method.

I've also looked at related types, including (for Groovy) MetaClass, and sub-types, and types in the org.codehaus.groovy.reflection package, and (for Java) types in the java.lang.reflect package.

Furthermore, I did an extensive Google search to trace extraterrestrials. ;-)

If we need a variable-length list of closure or method arguments, we can use an Object[] array, a List, or varargs as parameters:

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

Well, that's the limitations and options!

robbbert
  • 2,183
  • 15
  • 15
1

The parameter names can be retrieved if the compiler included debugging symbols, though not through the standard Java Reflection API.

See this post for an example https://stackoverflow.com/a/2729907/395921

Community
  • 1
  • 1
pditommaso
  • 3,186
  • 6
  • 28
  • 43
-1

I think you may want to take a look at varargs http://www.javalobby.org/articles/groovy-intro3/

javazquez
  • 93
  • 5