在 Groovy 中,您可以使用as
运算符或asType
方法进行令人惊讶的类型转换。例子包括
Short s = new Integer(6) as Short
List collection = new HashSet().asType(List)
我很惊讶我可以从 Integer 转换为 Short 并从 Set 转换为 List,因为这些类型之间没有“是”关系,尽管它们确实共享一个共同的祖先。
例如,下面的代码就转换所涉及的类型之间的关系而言等价于 Integer/Short 示例
class Parent {}
class Child1 extends Parent {}
class Child2 extends Parent {}
def c = new Child1() as Child2
但是这个例子当然失败了。as
运算符和方法背后的类型转换规则到底是什么asType
?