companion对象

在类中的object对象可以被标记为companion。

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

companion对象的成员可以使用类名作为限定符来进行调用。

val instance = MyClass.create()

companion对象的名字可以省略,在这样的情况下可以使用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中你可以拥有companion对象成员作为真实的静态方法和属性,就好像你使用@JvmStatic注解。

results matching ""

    No results matching ""