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注解。