以下两种投射方法之间是否存在实际差异:
result.count = (int) response['hits']['total']
VS
result.count = response['hits']['total'] as int
我使用@CompileStatic
并且编译器希望我进行演员表 - 这让我想知道两种表示法之间是否有任何表现或实际差异。
答案 0 :(得分:10)
主要区别在于使用继承的概念来进行转换,其中as
运算符是可能使用或不使用继承概念的自定义转换器。
哪一个更快?
这取决于转换器方法的实现。
嗯,所有的铸造真的意味着采取一个特定的对象 键入并“将其转换为”另一种对象类型。这个过程被称为 施放变量。
例如:
Object object = new Car();
Car car = (Car)object;
正如我们在示例中看到的那样,我们将类Object
的对象转换为Car
,因为我们知道该对象是Car
内向的实例。
但我们不能这样做,除非Car
是Bicycle
的子类,实际上没有任何意义(在这种情况下你会得到ClassCastException
):
Object object = new Car();
Bicycle bicycle = (Bicycle)object;
as
运营商在Groovy中,我们可以覆盖方法asType()来转换对象 进入另一种类型。我们可以在代码中使用asType()方法 调用转换,但我们甚至可以缩短它并用作。
在groovy中使用as
运算符时,左手操作数必须实现此方法:
Object asType(Class clazz) {
//code here
}
正如您所看到的,该方法接受了Class
的实例并实现了自定义转换器,因此基本上您可以将Object
转换为Car
或Car
转换为{{1}如果你想要这一切取决于你的实现。