在Kotlin铸造的成本有多高?

问题描述 投票:2回答:1

在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对象投射(例如,比方说)其中一个对象中的任何一个是多么昂贵?

casting kotlin
1个回答
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中投射更昂贵。

© www.soinside.com 2019 - 2024. All rights reserved.