Groovy探索 “as”關鍵字的深入使用

來源:互聯網
上載者:User

                 Groovy探索 "as"關鍵字的深入使用

 

 

在前面的系列《Groovy Tip 20  "as"關鍵字的用法》中,我們已經談到了"as"關鍵字的一些激動人心的用法。本篇則要接著前篇的內容說下去,繼續來展現"as"關鍵字的一些更為激動人心的用法。

在前一篇中,我們談到了"as"關鍵字的一個用法是進行類型轉換。最常用的是形如下面的用法:

 

      def list = ['a','b','c']

     

      println list.class

     

      def strs = list as String[]

     

      println strs.class

   

 

這就是一個常用的類型轉換的代碼,從下面的列印結果可以看出,"as"關鍵字的使用的確使得變數進行了類型轉換。

class java.util.ArrayList

class [Ljava.lang.String;

 

看到了這個用法,我們可能會想,"as"關鍵字的這個用法是如何?的?我們如何想把自己設計的兩個類之間進行相互轉換,該如何?。

比如說我們有如下的兩個類:

class A

{

    def x

   

}

 

 

class B

{

    def x

}

 

如果我們已經得到了一個A類的對象,如下:

 

      def a = new A(x:3)

 

 

那麼我們如何通過下面的語句擷取到一個B類的對象呢?

 

      def b = a as B

 

其實,很簡單,我們只需要在A類裡實現"asType"方法即可,如下所示:

 

class A

{

    def x

   

    Object asType(Class type)

    {

       if(type == B) return new B(x:this.x+1)

    }

}

 

這是我們重寫過的A類,那麼我們現在就可以測試看看我們是否實現了上面所希望的功能:

 

      def a = new A(x:3)

     

      def b = a as B

     

      println b.class.simpleName

     

      println b.x

   

 

運行結果為:

B

4

 

可以看到,的確是實現了我們預想的功能。

 

除此之外,"as"關鍵字還有讓我們驚奇的發現。比如,我們有如下的一個簡單類:

 

class C

{

    def x

    def y

   

    public C(x,y)

    {

       this.x = x

       this.y = y

    }

}

 

那麼,我們可以這樣執行個體化它的一個執行個體:

 

      def list = [1,2]

     

      def c = list as C

     

      println c.class.simpleName

     

      println "${c.x},${c.y}"

 

啟動並執行結果為:

C

1,2

 

 

這真是如魔幻一樣。

 

且慢驚歎,再跟著我們看看下面的例子,比如,我們定義了如下的一個介面:

 

interface D

{

    def test_d()

}

 

我們就可以這樣使用"as"關鍵字:

 

      def map = [test_d:{println 'ok'}]

     

      def d = map as D

     

      println d.class.simpleName

     

      d.test_d()

   

 

運行結果為:

$Proxy0

ok

 

 

真的是很酷吧!我們可以看到,"as"關鍵字是Groovy語言中是一個很重要的關鍵字,它的用法體現了Groovy語言作為一個動態語言的特點,一切都可以在運行期內在做決定,充分的展現了Groovy語言靈活、快捷的特點。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.