Groovy-as vs(强制转换)

Groovy-as vs(强制转换),groovy,compile-static,Groovy,Compile Static,以下两种铸造方法之间是否存在实际差异: result.count=(int)响应['hits']['total'] vs result.count=响应['hits']['total']为int 我使用的是@CompileStatic,编译器希望我执行强制转换-这让我想知道这两个符号之间是否有任何性能或实际差异。主要区别是强制转换使用继承的概念来进行转换,其中as运算符是一个自定义转换器,可能会或者可能不使用继承的概念 哪一个更快? 这取决于转换器方法的实现 铸造 好吧,所有的施法手段都是取一个

以下两种铸造方法之间是否存在实际差异:

result.count=(int)响应['hits']['total']

vs

result.count=响应['hits']['total']为int


我使用的是
@CompileStatic
,编译器希望我执行强制转换-这让我想知道这两个符号之间是否有任何性能或实际差异。

主要区别是强制转换使用继承的概念来进行转换,其中
as
运算符是一个自定义转换器,可能会或者可能不使用继承的概念

哪一个更快?
这取决于转换器方法的实现

铸造 好吧,所有的施法手段都是取一个特定的物体 类型并将其“转换为”另一个对象类型。这个过程叫做 铸造一个变量

例如:

正如我们在示例中看到的,我们正在将一个类为
object
的对象强制转换为
Car
的对象,因为我们知道该对象在本质上是
Car
的实例

但我们无法执行以下操作,除非
Car
Bicycle
的子类,实际上这没有任何意义(在这种情况下,您将得到
ClassCastException
):

作为操作员
在Groovy中,我们可以重写方法asType()来转换对象
换成另一种类型。我们可以在代码中使用asType()方法
调用转换,但我们甚至可以将其缩短并用作

在groovy中,要将
用作
运算符,左手操作数必须实现以下方法:

Object asType(Class clazz) {
        //code here
    }
如您所见,该方法接受
类的一个实例
并实现了一个自定义转换器,因此基本上您可以将
对象
转换为
汽车
汽车
转换为
自行车
,如果您需要,这一切都取决于您的实现

Object object = new Car();
Bicycle bicycle = (Bicycle)object;
Object asType(Class clazz) {
        //code here
    }