☰
第101篇 value class 与内联类:零开销包装类型
2026/10/8 5:13:24 网站建设 项目流程

value class(内联类)是 Kotlin 1.5 之后的语言特性,它在面试里的位置很尴尬:问"是什么"能答,@JvmInline、inline class这些名字都记得;问"什么时候用"就容易答成"为了性能"。事实上它最大的价值不是性能,而是类型安全——但这一点恰恰是绝大多数候选人说反的地方。本节把它讲透。

先把结论放在前面:value class包装一个底层类型,编译后这个包装不产生运行时对象(除非被反射、泛型装箱、作为可变属性保存等),因此既有零分配开销,又能在编译期区分语义上不同的"同型"数据。判据是:当两个概念底层都是Int但传错会产生逻辑 bug 时(用户 ID 传成订单 ID、金额传成积分),用 value class 把这个 bug 从运行时挪到编译期。

机制背后的执行路径

编译器对 value class 的处理是"拆箱内联":调用处直接把底层值传下去,不生成包装对象。

@JvmInline value class UserId(val value: Int) fun findUser(id: UserId): String = "user-${id.value}" // 编译后 findUser 的参数签名实际是 findUser(int) // 调用处:findUser(42) —— 没有包装对象

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询