在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
对象投射(例如,比方说)其中一个对象中的任何一个是多么昂贵?
我通过反汇编生成的字节码搞砸了一下,除了一种情况,强制转换与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中投射更昂贵。