Skip to content

值类 (Value Classes) Kotlin 2.0

源:Kotlin 值类指南

值类旨在以零运行时开销将特定类型(如 Password, Currency)进行包装。

零成本抽象

kotlin
@JvmInline
value class Password(val s: String)

// 编译前
fun login(pwd: Password)

// 编译后 (Java 视角) -> 直接替换为底层类型
public void login(String pwd)

性能陷阱:装箱 (Boxing)

虽然大部分时候是零开销,但在以下场景会发生“装箱”(实例化对象):

  1. 当做泛型使用时: List<Password> (泛型擦除导致必须存对象)。
  2. 当做接口使用时: interface I; value class C(val i: Int): I
  3. 可空包装: Password?

Kotlin 2.0 新特性

在 Kotlin 2.0 中,value class 的功能正在逐步增强,未来可能支持多个属性(目前的 JVM 后端仍处于实验阶段)。

kotlin
// 实验性:类似于结构体 (Struct)
// @JvmInline
// value class Point(val x: Int, val y: Int)