程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Groovy >> Groovy探索 as關鍵字的深入使用

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

編輯:Groovy

在前面的系列《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語言靈活、快捷的特點。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved