First they ignore you
          then they ridicule you
          then they fight you
          then you win
              -- Mahatma Gandhi
          Chinese => English     英文 => 中文             
          隨筆-221  評論-1047  文章-0  trackbacks-0
          由于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 山風小子 閱讀(3393) 評論(5)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 孟连| 远安县| 桑植县| 农安县| 高陵县| 麟游县| 天全县| 荆门市| 广南县| 密云县| 上杭县| 肇州县| 红安县| 呈贡县| 永福县| 惠来县| 西贡区| 苏尼特右旗| 肥城市| 南安市| 明水县| 运城市| 财经| 长白| 南宁市| 陈巴尔虎旗| 瑞安市| 凤冈县| 公安县| 乌拉特中旗| 塔城市| 大渡口区| 临武县| 铜川市| 南涧| 黑龙江省| 孝感市| 永城市| 广安市| 黔江区| 昆明市|