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一種單繼承的語言,即子類只能繼承一個父類,所以無法重用兩個類的實現(xiàn),Groovy在這方面做了些改進,引入了Mixin

          現(xiàn)在讓我們看一下Groovy中的Mixin的威力吧:


          // ?創(chuàng)建一個Category,以重用該類中的靜態(tài)方法的實現(xiàn)
          class ?FileCategory?{
          ????
          // ?實現(xiàn)操作符(<<)重載(?<<?對應的方法為leftShift?)
          ???? static ?leftShift(self,?other)?{
          ????????
          // ?將"Hello,?"以及other中的內容寫入self表示的文件中
          ????????self.write( " Hello,?$other " )
          ????????println?
          " done! "
          ????}
          }

          // ?利用關鍵字use,使用之前創(chuàng)建的Category
          use?(FileCategory)?{
          ????
          // ?創(chuàng)建File的一個實例,?并將"Hello,?山風小子"寫入該文件中,注意不帶雙引號
          ???? new ?File( " hello.txt " )? << ? " 山風小子 "
          }

          File類 已經(jīng)繼承了Object類 ,但它通過Groovy中Mixin,重用了FileCategory類中l(wèi)eftShfit方法的實現(xiàn),
          其相關細節(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 山風小子 閱讀(3390) 評論(5)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 宿松县| 十堰市| 凌海市| 三台县| 颍上县| 双牌县| 香格里拉县| 武山县| 七台河市| 南岸区| 江都市| 湖南省| 淄博市| 浪卡子县| 三亚市| 西盟| 五台县| 泽普县| 成安县| 马山县| 全州县| 乐平市| 杨浦区| 光泽县| 象山县| 牙克石市| 丹阳市| 家居| 祁连县| 修文县| 吉安县| 同德县| 南平市| 家居| 宁津县| 鲁甸县| 临沭县| 英山县| 灵丘县| 金寨县| 徐闻县|