Получить Groovy Closure / Список параметров метода - PullRequest
7 голосов
/ 06 ноября 2010

Как мы получаем список параметров замыкания / метода в groovy динамически, стиль javascript через массив arguments

скажем, например, что я хочу записать сообщение таким образом

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}"
}

Я прочитал один раз о способе ссылки на список параметров замыкания, но я не помню этого и смотрю на Groovy API для Замыкание показывает только метод getParametersType () .Что касается метода, есть способ вызвать метод как замыкание, а затем я могу получить параметры метода

ken

Ответы [ 3 ]

2 голосов
/ 07 ноября 2010

Тебе не понравится (и я надеюсь, что это не плохо - исследовать и отвечать), однако:

Существует нет API для доступа к списку параметров, объявленных в Groovy Closure или в Java Method.

Я также рассмотрел связанные типы, включая (для Groovy) MetaClass, а также подтипы и типы в пакете org.codehaus.groovy.reflection и (для Java) типы в пакете java.lang.reflect.

Кроме того, я сделал обширный поиск в Google, чтобы отследить инопланетян . ; -)

Если нам нужен список переменных длины для аргументов замыкания или метода, мы можем использовать массив Object[], List или varargs в качестве параметров:

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

Ну, это ограничения и опции!

1 голос
/ 24 марта 2012

Имена параметров могут быть получены, если компилятор включал символы отладки, но не через стандартный Java Reflection API.

См. Этот пост для примера https://stackoverflow.com/a/2729907/395921

0 голосов
/ 03 мая 2013

Я думаю, вы можете взглянуть на varargs http://www.javalobby.org/articles/groovy-intro3/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...