当前位置:嗨网首页>书籍在线阅读

04-伴生对象

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.1.3 伴生对象

Kotlin并没有提供静态类成员的概念,但它提供了伴生对象来实现这一功能。在Kotlin中,使用关键字companion声明的对象称为伴生对象,伴生对象通常位于类的内部。

class MyClass {
      companion object Factory {
        fun create(): MyClass = MyClass()
      }
}

伴生对象中定义的成员可以通过类名直接访问。代码如下。

val instance = MyClass.create()

当然,调用伴生对象时还可以省略伴生对象的名称,这时候直接使用类名. Companion的方式来完成调用。代码如下。

class MyClass {
      companion object {
      }
}
val x = MyClass.Companion

从上面的实例可以看出,调用伴生对象时不用创建包含伴生对象的实例,调用的方式主要有两种:一种是类名.伴生对象,另一种是类名. Companion。

虽然伴生对象的成员看起来像其他语言的静态成员,但在运行期间,它们仍然是真实对象的实例成员,这与静态成员是不一样的。同时,伴生对象还可以实现某些接口。代码如下。

interface Factory<T> {
    fun create(): T
}
class MyClass {
    companion object : Factory<MyClass> {
        override fun create(): MyClass = MyClass()
    }
}

当然,对于JVM平台来说,使用@JvmStatic注解时,Kotlin的编译器可以将伴生对象的成员生成为真正的静态方法和字段。