以下两种铸造方法之间是否有任何实际区别:
result.count = (int) response['hits']['total']
对比
result.count = response['hits']['total'] as int
我正在使用@CompileStatic
并且编译器希望我进行强制转换 - 这让我想知道这两种表示法之间是否存在任何性能或实际差异。
以下两种铸造方法之间是否有任何实际区别:
result.count = (int) response['hits']['total']
对比
result.count = response['hits']['total'] as int
我正在使用@CompileStatic
并且编译器希望我进行强制转换 - 这让我想知道这两种表示法之间是否存在任何性能或实际差异。
主要区别在于强制转换使用继承的概念进行转换,其中as
运算符是可能使用或不使用继承概念的自定义转换器。
哪个更快?
这取决于转换器方法的实现。
好吧,所有强制转换的真正含义是获取一个特定类型的 Object 并将其“转换为”另一种 Object 类型。这个过程称为强制转换变量。
例如:
Object object = new Car();
Car car = (Car)object;
正如我们在示例中看到的,我们将类的对象Object
转换为 a Car
,因为我们知道该对象是Car
深层的实例。
但是我们不能做以下事情,除非Car
它的子类Bicycle
实际上没有任何意义(你会ClassCastException
在这种情况下得到):
Object object = new Car();
Bicycle bicycle = (Bicycle)object;
as
操作员在 Groovy 中,我们可以重写 asType() 方法将对象转换为另一种类型。我们可以在代码中使用 asType() 方法来调用转换,但我们甚至可以将其缩短并使用 as。
在 groovy 中要使用as
运算符,左侧操作数必须实现此方法:
Object asType(Class clazz) {
//code here
}
正如您所看到的,该方法接受一个实例Class
并实现了一个自定义转换器,因此基本上您可以转换Object
为Car
或转换为Car
,Bicycle
如果您想要这一切都取决于您的实现。