仔細研究一下方法呼叫和屬性訪問

2021-04-23 08:08:23 字數 1605 閱讀 7773

仔細研究一下方法呼叫和屬性訪問。

通過為乙個類新增方法 'invokemethod' 可以有機會執行原本未定義的方法,示例如下。

class myclass

def invokemethod(string name, object args))"}}

def mine= new myclass()

assert mine.hello() == 'invoked hello directly'

assert mine.foo("mark", 19) == 'unknown method foo(mark, 19)'

可以看出,這時invokemethod只是接管了那些未定義的方法,如果讓類實現groovyinterceptable,則invokemethod可以接管所有方法。

class myclass implements groovyinterceptable

def invokemethod(string name, object args))"}}

def mine= new myclass()

assert mine.hello() == 'invoked method hello()'

assert mine.foo('mark', 19) == 'invoked method foo(mark, 19)'

//注意我們可以通過.& 語法呼叫來實現對靜態定義的方法呼叫

assert mine.&hello() == 'invoked hello() directly'

對於屬性,情況類似

class myclass

void setproperty(string property, object newvalue)

}def mine= new myclass()

assert mine.greeting == 'read from property greeting'

trycatch(e)

//同樣,如果要直接訪問原來定義好的屬性,可以用.@語法,注意和方法不同,對於方法靜態呼叫,用.&

assert mine.@greeting == 'accessed greeting directly'

還可以做到靜態呼叫和動態呼叫二者兼顧,有靜態則用靜態值,否則用動態的,示例如下:

class myclass implements groovyinterceptablecatch(e)

}def hello(object args))" }

def id()

def invokemethod(string name, object args)catch(e)}}

def mine= new myclass()

assert mine.greeting == 'white: indirectly accessed greeting'

assert mine.farewell == 'no such property farewell'

assert mine.hello(1, 'b', 3) == 'green: indirectly invoked hello with (1, b, 3)'

assert mine.foo('mark', 19) == 'no such method foo'

央視播高畫質,研究一下

央視播高畫質,研究一下 2009 10 11 00 38 49 分類 系統運維 1.高畫質介面是hdmi 首先明白一點,要看高畫質就需要 高畫質顯示器 高畫質機頂盒。顯示器就只是顯示器,它按照固定介面接收資料,然後隔行或逐行顯示出來。而機頂盒的作用是將各種訊號進行解碼,並轉換為固定格式傳送出去。兩者...

Android 深入的研究一下藍芽

藍芽協議體系中的協議按sig的關注程度分為四層 選用協議 ppp udp tcp ip obex wap vcard vcal irmc wae。1 藍芽核心協議連線管理協議 lmp 服務發現協議 sdp 2 電纜替代協議 rfcomm 3 控制協議4 選用協議tcp udp ip物件交換協議 ob...

這些例子有點意思,可以研究一下哈

金融借貸愛錢袋貸款產品介紹推薦列表頁面模板。熱門貸 產品貸 極速貸 大額貸 信用貸等。html5 canvas繪製眼睛跟隨滑鼠特效 canvas繪製一千隻眼睛盯著你,通過滑鼠移動控制眼睛方向位置效果。html5 canvas自定義繪畫銀河特效 基於canvas預設設定rbg顏色,通過使用 左鍵單擊 ...