Groovy - 作为vs(演员)

时间:2017-04-16 23:45:29

标签: groovy compile-static

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

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

VS

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

我使用@CompileStatic并且编译器希望我进行演员表 - 这让我想知道两种表示法之间是否有任何表现或实际差异。

1 个答案:

答案 0 :(得分:10)

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

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

铸造

  

嗯,所有的铸造真的意味着采取一个特定的对象   键入并“将其转换为”另一种对象类型。这个过程被称为   施放变量。

例如:

Object object = new Car();
Car car = (Car)object;

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

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

Object object = new Car();
Bicycle bicycle = (Bicycle)object;

as运营商

  

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

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

Object asType(Class clazz) {
        //code here
    }

正如您所看到的,该方法接受了Class的实例并实现了自定义转换器,因此基本上您可以将Object转换为CarCar转换为{{1}如果你想要这一切取决于你的实现。