Map參數是我們在Groovy語言的編碼中比較常用的一種參數類型,我們常常會很自然的寫出來如下的 代碼:
t.testMap(a:1)
t.testMap(a:1,b:1)
t.testMap(a:1,b:1,c:1)
new Person(name:'Tom',sex:23)
這些都是Map參數的使用。以此類推,我們也常常希望List參數也有同樣的功能,比如,我們有如下 的一個以List對象為參數的方法:
class Testor2 {
def testList(List list)
{
println list
}
}
然後,我們寫了如下的測試:
def t = new Testor2()
t.testList(1,2,3)
我們熱切的期望這樣的代碼能夠正常運行,很可惜的是,上面的代碼會報如下的錯誤:
Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: str.Testor2.testList() is applicable for argument types: (java.lang.Integer, java.lang.Integer, java.lang.Integer) values: {1, 2, 3}
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap (ScriptBytecodeAdapter.java:54)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap (ScriptBytecodeAdapter.java:59)
不過不要灰心,其實,我們的數組參數擁有這樣的功能。比如,我們有如下的一個以數組為參數的方 法:
class Testor2 {
def testArray(int[] arrs)
{
println arrs
}
}
這樣,我們就可以寫出如下的測試:
def t = new Testor2()
t.testArray(1,2,3)
運行結果為:
[1, 2, 3]
Groovy語言中的方法還有一個值得注意的變化是動態方法名的現象。比如,我們可以以如下的方式調 用一個方法:
t."function_name"()
這種使用方式我們應該已經司空見慣了。但是,這裡面隱藏著一個比較有意思的問題,就是,我們可 以在方法名中出現"."和"-"這樣的一些字符,這在正常的方法名中是不可能出現 的。
比如,我們有如下的一個方法:
class Testor2 {
def "a.b"()
{
println 'haha'
}
}
這也是可以正常編譯的。而且我們可以這樣調用它:
def t = new Testor2()
t."a.b"()
運行結果為:
haha
有了這樣的概念,下次如果我們遇到如下的代碼,就不用驚慌了:
def web = builder.'web-app' {
builder.'display-name'('Groovy WebApp')
}