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