面试官为什么爱考object 与 companion object?因为这题像一根试纸:背过的人能答出名词,用过的人能讲出细节,踩过坑的人还会主动补一句边界条件。三种回答摆在面前,水平的差距一目了然。
先把结论放在前面:@JvmStatic 与 @JvmField 让伴生成员在 Java 侧呈现为真正的静态成员。真正要把这题答出层次,得把概念拆开看:它解决什么问题、不解决什么问题、和相邻概念的分界在哪里。
这篇object 与 companion object这题的答案可以很短,也可以很长——这篇把它讲成有层次的长答案。
容易混的几个概念
最常见的坑是object 里的可变状态全局共享,成为跨页面数据串号的源头。
其次是Java 侧调用伴生成员没加 @JvmStatic,调用方式变成 INSTANCE 中转,互操作别扭。
还有一个更隐蔽的坑:就object 与 companion object而言,提前声明前提条件、失败路径写清兜底行为,能把大部分事故挡在上线前。
一段代码看懂差异
看一段能直接跑的代码,把上面的机制落到具体写法上:
// object 与 companion object
object Single { // object:饿汉单例
fun doWork() {}
}
class Repo {
companion object { // 类级静态区
const val TAG = \”Repo\”
网硕互联帮助中心





评论前必须登录!
注册