仔細研究一下方法呼叫和屬性訪問。
通過為乙個類新增方法 '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顏色,通過使用 左鍵單擊 ...