跳到主要内容

1 篇博文 含有标签「when」

查看所有标签

Kotlin 2.4.20 when 表达式 invokedynamic 稳定版实战:告别 instanceof 链,拥抱 typeSwitch 字节码

· 阅读需 7 分钟
重庆 Kotlin User Group

你可能不知道,Kotlin 的 when 表达式在 JVM 上编译后,会生成一串冗长的 instanceof 检查。每个分支都是一次类型判断,分支越多,字节码越膨胀。但从 Kotlin 2.4.20 开始,这一切变了——when 表达式正式支持 invokedynamic 编译,默认启用,无需任何额外配置。

来看一个典型的场景:

sealed class Result
data class Success(val data: String) : Result()
data class Error(val message: String, val code: Int) : Result()
object Loading : Result()

fun handleResult(result: Result): String = when (result) {
is Success -> "数据: ${result.data}"
is Error -> "错误 ${result.code}: ${result.message}"
is Loading -> "加载中..."
}