由于Java一種單繼承的語言,即子類只能繼承一個父類,所以無法重用兩個類的實現,Groovy在這方面做了些改進,引入了Mixin
現在讓我們看一下Groovy中的Mixin的威力吧:
//
?創建一個Category,以重用該類中的靜態方法的實現
class
?FileCategory?{
????
//
?實現操作符(<<)重載(?<<?對應的方法為leftShift?)
????
static
?leftShift(self,?other)?{
????????
//
?將"Hello,?"以及other中的內容寫入self表示的文件中
????????self.write(
"
Hello,?$other
"
)
????????println?
"
done!
"
????}
}
//
?利用關鍵字use,使用之前創建的Category
use?(FileCategory)?{
????
//
?創建File的一個實例,?并將"Hello,?山風小子"寫入該文件中,注意不帶雙引號
????
new
?File(
"
hello.txt
"
)?
<<
?
"
山風小子
"
}
File類
已經繼承了Object類
,但它通過Groovy中Mixin,重用了FileCategory類中leftShfit方法的實現,
其相關細節說明已經注于代碼中,希望大家喜歡 :)
未來Groovy的Mixin實現: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
山風小子 閱讀(3386)
評論(5) 編輯 收藏 所屬分類:
Groovy & Grails