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 山風小子 閱讀(3385) 評論(5)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 凯里市| 丰都县| 辉县市| 汕尾市| 缙云县| 洪洞县| 儋州市| 广西| 石城县| 麻阳| 栖霞市| 德格县| 海宁市| 尤溪县| 东平县| 肥城市| 五华县| 德州市| 泰兴市| 太湖县| 绥化市| 德令哈市| 新源县| 双峰县| 孟津县| 抚松县| 阿坝| 北海市| 调兵山市| 阿鲁科尔沁旗| 运城市| 会理县| 满洲里市| 玉门市| 调兵山市| 德保县| 大方县| 达尔| 漳州市| 津市市| 英超|