由于Java一種單繼承的語言,即子類只能繼承一個父類,所以無法重用兩個類的實現(xiàn),Groovy在這方面做了些改進(jìn),引入了Mixin
現(xiàn)在讓我們看一下Groovy中的Mixin的威力吧:
//
?創(chuàng)建一個Category,以重用該類中的靜態(tài)方法的實現(xiàn)
class
?FileCategory?{
????
//
?實現(xiàn)操作符(<<)重載(?<<?對應(yīng)的方法為leftShift?)
????
static
?leftShift(self,?other)?{
????????
//
?將"Hello,?"以及other中的內(nèi)容寫入self表示的文件中
????????self.write(
"
Hello,?$other
"
)
????????println?
"
done!
"
????}
}
//
?利用關(guān)鍵字use,使用之前創(chuàng)建的Category
use?(FileCategory)?{
????
//
?創(chuàng)建File的一個實例,?并將"Hello,?山風(fēng)小子"寫入該文件中,注意不帶雙引號
????
new
?File(
"
hello.txt
"
)?
<<
?
"
山風(fēng)小子
"
}
File類
已經(jīng)繼承了Object類
,但它通過Groovy中Mixin,重用了FileCategory類中l(wèi)eftShfit方法的實現(xiàn),
其相關(guān)細(xì)節(jié)說明已經(jīng)注于代碼中,希望大家喜歡 :)
未來Groovy的Mixin實現(xiàn):http://docs.codehaus.org/display/GroovyJSR/Mixins
而從Groovy1.6beta-2-snapshot開始, Groovy支持如下寫法:
//
?改自官方例子
import
?java.util.concurrent.locks.
*
Object.metaClass.mixin?ReentrantLock
def?name?
=
?
"
abcdef
"
name.lock()
try
?{
????println?name.isLocked()
}?
finally
?{
????name.unlock()
}
附:
朝花夕拾——Groovy & Grails
posted on 2007-11-27 22:16
山風(fēng)小子 閱讀(3385)
評論(5) 編輯 收藏 所屬分類:
Groovy & Grails