值类 (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.x 路线图
在 Kotlin 2.0 及后续版本(如 2.3.0)中,value class 的功能正在逐步增强:
K2 编译器优化: 进一步提升了内联后的字节码质量,减少了边缘情况下的装箱开销。
多平台支持: 增强了在 KMP 项目中跨平台共享值类的稳定性。
多属性实验: 未来可能支持类似于结构体(Struct)的多属性值类。
kotlin
// 实验性 (可能需要启用编译器参数):
// @JvmInline
// value class Point(val x: Int, val y: Int)