内联类
00:00
Kotlin内联类inline class避免装箱开销。
1. 基本用法
@JvmInline
value class UserId(val id: String)
@JvmInline
value class Meter(val value: Double)
2. 避免装箱
// 不用内联类:Int 装箱为 Integer
data class Wrapper(val value: Int)
val list = listOf(Wrapper(1), Wrapper(2)) // 每个都装箱
// 用内联类:编译为原始类型
@JvmInline
value class InlineWrapper(val value: Int)
val list2 = listOf(InlineWrapper(1), InlineWrapper(2)) // 无装箱
3. 类型安全
@JvmInline
value class UserId(val id: String)
@JvmInline
value class OrderId(val id: String)
fun getUser(id: UserId) { /* ... */ }
getUser(UserId("123")) //
getUser(OrderId("123")) // 编译错误,类型不匹配
4. 限制
- 必须有且仅有一个 val 属性
- 不能有 init 块
- 不能继承其他类
- 运行时可能退化为底层类型(泛型、可空时)