ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

第069篇 object 与 companion object:Kotlin 里的单例

第069篇 object 与 companion object:Kotlin 里的单例 object与companion object这题,答"object 是单例、companion object 是类的伴生对象"只够入门。真正拉开差距的是它们在字节码层面变成了什么、初始化时机是什么、Java 侧看到的样子是什么——这三个问题连起来,才能解释为什么@JvmStatic、@JvmField会影响性能与可见性。先把结论放在前面:object声明编译成一个私有 final 的静态实例字段+ 构造器被私有化,类初始化时创建唯一实例;companion object是类内部的伴生对象,编译器为它生成一个静态Companion字段(private static final Companion Companion = null)与一个INSTANCE静态字段,伴生对象本身也是单例。@JvmStatic把伴生对象的成员额外生成一份静态方法转发;@JvmField把属性暴露为真正的静态字段。这两者的差别是"Java 侧调用形态"与"反射可见性"的差别。机制拆解object的字节码结构很直白:一个类里有一个private static final的实例字段(名字
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进