2010-11-06 23 views
7

我們如何獲取的常規動態封閉/方法的參數列表,通過參數數組的JavaScript風格檢索的Groovy閉包/方法的參數列表

說,例如,我想記錄的消息這樣

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

我約的方式來引用的封閉的參數列表讀取一次,但我沒有這方面的記憶,並在看groovy API Closure只顯示getParametersType()方法。至於方法,有一種方法來調用一個方法作爲閉合,然後我可以檢索方法參數

回答

2

你不會喜歡它(我希望這不是我不好做研究並回答),但是:

沒有 API訪問的一個Groovy Closure或在Java Method聲明參數列表。

我也查看過相關的類型,包括(對於Groovy)MetaClass,子類型和org.codehaus.groovy.reflection包中的類型,以及java.lang.reflect包中的(對於Java)類型。

此外,我做了一個廣泛的谷歌搜索痕跡外星人。 ;-)

如果我們需要的關閉或方法參數的可變長度的列表,我們可以使用一個Object[]陣列,List,或varargs作爲參數:

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

嗯,這是限制和選項!