2009-08-14 103 views
8

在Groovy中,您可以使用as運算符或asType方法進行令人驚訝的類型轉換。例子包括Groovy類型轉換

Short s = new Integer(6) as Short 
List collection = new HashSet().asType(List) 

我很驚訝,我可以從一個Integer到短而從一組到列表轉換,因爲沒有「是」,這些類型之間的關係,雖然他們有一個共同祖先。

例如,下面的代碼等同於整數/短示例中所涉及的轉化

class Parent {} 
class Child1 extends Parent {} 
class Child2 extends Parent {} 

def c = new Child1() as Child2 

當然,這個例子失敗的,但各類型之間的關係 方面。 as運營商和asType方法背後的類型轉換規則究竟是什麼?

回答

5

根據什麼魯文已經指出了最終結果:

Set collection = new HashSet().asType(List) 

Set collection = new ArrayList(new HashSet()) 

asType方法能夠識別出您想要一個List並且是事實HashSetCollection,它只是使用ArrayList的構造函數,它需要一個Collection

至於數字1,它將Integer轉換爲Number,然後調用shortValue方法。

我沒有意識到有如此多的邏輯來轉換這樣的參考文獻/值,我衷心感謝Ruben指出來源,我會在這個主題上發佈不少博客文章。