首页 / 资讯中心 / 文章详情

第101篇 value class 与内联类:零开销包装类型

第101篇 value class 与内联类:零开销包装类型 ★ FEATURED ARTICLE
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) —— 没有包装对象
阅读完成 · 觉得有帮助?
咨询建站