知识卡片

伴生对象实现类似静态成员

专业/工作 · 77

内容

Kotlin的类本身不能有静态成员,static关键字不属于Kotlin语法。想要类似静态成员的效果,可以用包级顶层函数,但顶层函数访问不到类的private成员;如果既要像静态成员一样通过类名调用、又要访问类内部私有状态,就用companion object在类中声明伴生对象承载这些成员。反编译后这些成员变成了JVM里的静态字段/方法,但伴生对象在语言层面仍是一个真实对象实例,因此能像普通对象一样实现接口,这是纯静态语法做不到的。

参考来源

《Kotlin开发快速入门与实战》第5章《Kotlin面向对象》