Kotlin的铸造成本如何?

时间:2018-09-12 13:40:27

标签: casting kotlin

在科特林,铸造班的费用是多少?

例如,让我们来看看下面的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个对象中的一个,这会花费多少呢?

1 个答案:

答案 0 :(得分:2)

我反汇编了生成的字节码,有点混乱,除了一种情况,转换与Java相同。似乎不同的一种情况是使用the safe cast operatoras?时,如下所示:

val thing = "" as? Int

这将生成与此Java代码等效的字节码:

String _temp = "";
if (!(_temp instanceof Integer)) {
    _temp = null;
}
Integer thing = (Integer) _temp;

这使其比Java中的常规强制转换要贵一些。但是,在Java中没有直接等同于这种行为的方式,除非仍然编写类似的if语句,所以我认为可以肯定地说在Kotlin中进行广播并不比在Java中进行铸造更昂贵。< / strong>