Groovy函式呼叫

2021-10-05 22:31:15 字數 2968 閱讀 1816

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
上面的介面有四個函式,其中callbackcallback2相同引數,callback3callback4相同引數.

groovy中擁有如下語法糖,可以讓你只關心相同型別函式的實現,比如我們只關心callback函式和callback2,那麼我們只需要在lambda表示式中如下宣告即可:

def fun7(icallback callback) 

//lambda表示式呼叫

fun7 ( as icallback)

輸出:

hello world null

hello world null

但是你無法只單獨關心callback函式,因為callbackcallback2相同引數執行器無法確定到底lambda表示式實現的是哪乙個具體函式。

我們如果只關心callback3callback4可以使用如下語法:

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...