2010-11-06 2 views
7

Как мы получаем список параметров замыкания/метода в заводной динамически, JavaScript стиль через массив аргументовПолучить Groovy Закрытие/список параметров Метод

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

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 для Closure показывает только getParametersType() метод. Что касается способа, существует способ вызова метода в качестве закрытия, а затем я могу получить параметры метода

кен

ответ

2

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

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

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

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

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

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

Ну, это ограничения и варианты !

1

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

Увидеть этот пост для примера https://stackoverflow.com/a/2729907/395921

Смежные вопросы