值类 (Value Classes) Kotlin 2.0
值类旨在以零运行时开销将特定类型(如 Password, Currency)进行包装。
零成本抽象
kotlin
@JvmInline
value class Password(val s: String)
// 编译前
fun login(pwd: Password)
// 编译后 (Java 视角) -> 直接替换为底层类型
public void login(String pwd)性能陷阱:装箱 (Boxing)
虽然大部分时候是零开销,但在以下场景会发生“装箱”(实例化对象):
- 当做泛型使用时:
List<Password>(泛型擦除导致必须存对象)。 - 当做接口使用时:
interface I; value class C(val i: Int): I。 - 可空包装:
Password?。
Kotlin 2.0 新特性
在 Kotlin 2.0 中,value class 的功能正在逐步增强,未来可能支持多个属性(目前的 JVM 后端仍处于实验阶段)。
kotlin
// 实验性:类似于结构体 (Struct)
// @JvmInline
// value class Point(val x: Int, val y: Int)