在科特林,铸造班的费用是多少?
例如,让我们来看看下面的Test
类
open class Test {
open fun question() = "Basic question"
}
和3个继承类
class MathTest : Test() {
override fun question() = "2+2=?"
}
class EnglishTest : Test() {
override fun question() = "Who created SO?"
}
class HistoryTest: Test() {
override fun question() = "When was SO created?"
}
在运行时,在Android中(以及一般情况下)将100个Test
对象投射到这3个对象中的一个,这会花费多少呢?
答案 0 :(得分:2)
我反汇编了生成的字节码,有点混乱,除了一种情况,转换与Java相同。似乎不同的一种情况是使用the safe cast operator,as?
时,如下所示:
val thing = "" as? Int
这将生成与此Java代码等效的字节码:
String _temp = "";
if (!(_temp instanceof Integer)) {
_temp = null;
}
Integer thing = (Integer) _temp;
这使其比Java中的常规强制转换要贵一些。但是,在Java中没有直接等同于这种行为的方式,除非仍然编写类似的if
语句,所以我认为可以肯定地说在Kotlin中进行广播并不比在Java中进行铸造更昂贵。< / strong>