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.x 路线图

在 Kotlin 2.0 及后续版本(如 2.3.0)中,value class 的功能正在逐步增强:

  • K2 编译器优化: 进一步提升了内联后的字节码质量,减少了边缘情况下的装箱开销。

  • 多平台支持: 增强了在 KMP 项目中跨平台共享值类的稳定性。

  • 多属性实验: 未来可能支持类似于结构体(Struct)的多属性值类。

kotlin

// 实验性 (可能需要启用编译器参数):

// @JvmInline

// value class Point(val x: Int, val y: Int)