2009-08-14 16 views
8

Groovyでは、as演算子またはasTypeメソッドを使用して驚くべき型変換を実行できます。例としては、彼らが共通を共有んが何が、これらのタイプ間の関係「である」がないので、私は、私はショートにしてセットからリストへの整数から変換できることを驚いているGroovy型変換

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

が含まれます祖先。

たとえば、次のコードでは、変換

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) 

は、

asType方法は、あなたが Listを望むと HashSetCollectionある事実つつある認識
Set collection = new ArrayList(new HashSet()) 

ですそれはちょうどArrayListのコンストラクタを使用して、Collectionをとります。

番号1は、IntegerNumberに変換してからshortValueメソッドを呼び出します。

このような参照/値の変換には非常に多くの論理があったことを認識していませんでした。このトピックについてRubenがRubenにソースを指摘してくれて本当に感謝しています。