2009-08-14 1129 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指出来源,我会在这个主题上发布不少博客文章。