Groovy - 作为vs(演员)

Kon*_*ong 11 groovy compile-static

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

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

VS

result.count = response['hits']['total'] as int

我正在使用@CompileStatic并且编译器希望我进行演员表 - 这让我想知道这两个表示法之间是否存在任何性能或实际差异.

dsh*_*rew 10

主要区别在于使用继承的概念来进行转换,其中as运算符是可能使用或不使用继承概念的自定义转换器.

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

铸件

好吧,所有的转换真的意味着将一个特定类型的对象"转变为"另一个对象类型.此过程称为转换变量.

例如:

Object object = new Car();
Car car = (Car)object;
Run Code Online (Sandbox Code Playgroud)

正如我们在示例中看到的那样,我们将类的对象Object转换为a,Car因为我们知道该对象是内向的实例Car.

但我们不能这样做,除非实际上没有任何意义的Car子类Bicycle(ClassCastException在这种情况下你会得到):

Object object = new Car();
Bicycle bicycle = (Bicycle)object;
Run Code Online (Sandbox Code Playgroud)

as 操作者

在Groovy中,我们可以覆盖方法asType()以将对象转换为另一种类型.我们可以在代码中使用方法asType()来调用转换,但我们甚至可以缩短它并将其用作.

在groovy中使用as运算符左手操作数必须实现此方法:

Object asType(Class clazz) {
        //code here
    }
Run Code Online (Sandbox Code Playgroud)

正如你所看到的方法接受的一个实例,Class并实现自定义转换所以基本上你可以转换ObjectCarCarBicycle如果你想这一切都取决于您的实现.