def [返回值型別] 函式名:
其中[返回值型別]
可以省略,那麼返回型別為任意物件
def int fun1()
def fun2()
def fun3()
def fun4()
函式可以省略括號。
def fun5(x, y, z)
fun5 "hello", " jack", "!"
函式介面簡單理解是單方法介面。當乙個
函式
需要傳遞乙個函式式介面
作為引數
時,可以使用lambda
表示式直接建立乙個匿名內部類實現
inte***ce icallback
def fun7(icallback callback)
//lambda表示式呼叫
fun7
//常規的構建匿名例項呼叫
fun7(new icallback()
})
如果非函式式介面呢?
請看如下例子:
inte***ce icallback
上面的介面有四個函式,其中callback
和callback2
相同引數,callback3
和callback4
相同引數.
在groovy
中擁有如下語法糖,可以讓你只關心相同型別函式的實現,比如我們只關心callback
函式和callback2
,那麼我們只需要在lambda
表示式中如下宣告即可:
def fun7(icallback callback)
//lambda表示式呼叫
fun7 ( as icallback)
輸出:
hello world null
hello world null
但是你無法只單獨關心callback
函式,因為callback
和callback2
相同引數執行器無法確定到底lambda表示式實現的是哪乙個具體函式。
我們如果只關心callback3
和callback4
可以使用如下語法:
def fun7(icallback callback)
icallback icallback = as icallback
//lambda表示式呼叫
fun7 icallback
輸出:
hello world hello world
hello world hello world
在groovy
可以使用預設引數減輕過載**負擔。
def myfun(x = 1, y = 2, c)
//這裡x="a" y="b" c="c"
myfun("a", "b", "c")
//這裡x="a" y="2" c="c"
myfun("a", "c")
//x=1 y=2 c="c"
myfun("c")
def myfun(x, y, c)
myfun("a", age: "2", name: "小明", "c")
我們看到有一串特殊的引數age: "2", name: "小明"
這個不是map
嗎?是不是把map
賦值給y
?
我們執行檢視結果:
x= [age:2, name:小明] y= a c= c
很顯然不符合預期,這個也是groovy
比較詭異的地方。
這個僅僅是乙個硬性語法:當函式引數存在如下寫法***:yyy,zzz:dddd
時,函式第乙個引數必須為map
型別,且***:yyy,zzz:dddd
無論寫在函式何處位置都會強制賦值給第乙個形參。
再看乙個例子
def myfun( x, y, c)
//我們把map 放最後
myfun("a", "c",age: "2", name: "小明")
輸出:
x= [age:2, name:小明] y= a c= c
當然這裡有同學要問了,如果我第三個引數就要map
型別怎麼辦?請在map外面加
如下:
def myfun( x, y, c)
//我們把map 放最後,且外面加了[ ]
myfun("a", "c",[age: "2", name: "小明"])
輸出:
x= a y= c c= [age:2, name:小明]
這裡不需要深究為什麼是這樣,語法罷了。
def test(string name, ... arg)
def test2(string name, object arg)
test("a", 1, 23)
test2("a", 1, 23)
當元素的最後乙個是陣列時自動轉化為可變引數型別
以上輸出:
[1, 23]
[1, 23]
java呼叫groovy方法
專案中自己寫的方法 第一句 獲取tomcat載入專案完成後的路徑,再拼接groovy的包路徑 create by hanweihu on 2018 06 13 pm param grofullname groovy的全名 包括副檔名 param params 引數,如果有多個,object para...
Groovy探索之MOP 十二 方法的呼叫順序
groovy探索之mop 十二 方法的呼叫順序 我們知道,除了使用hook來攔截方法以外,我們還可以通過各種方式來實現方法。如,我們可以在類裡直接實現方法 我們可以通過expandometaclass在執行期內新增方法 我們還可以通過expandometaclass在執行期內單獨給乙個物件新增方法。...
Groovy集合型別
groovy中有3種集合型別,分別是列表list 對映map 區間range 1 列表 list的初始化,直接在 中直接寫入初始的資料即可 def list1 1,2,3 list支援的運算子和方法 def list2 list1 2 1,2,3,1,2,3 list2.unique 1,2,3 l...