当你在Kotlin中定义一个class ,你需要在访问该类的方法和属性之前创建一个该类的实例。
例如,假设你有一个Car 类,其细节如下:
class Car {
var category = "Sedan"
fun start() = println("The car is starting..")
}
Car 要访问上面的category 和start() ,你需要创建一个该类的实例:
val car = Car()
car.start() // The car is starting..
car.category = "Minivan"
Kotlincompanion object 是一种编写class 的方法和属性的方式,无需创建该类的实例就可以调用。
你放在companion object 里面的方法和属性也被称为class 的静态成员。
下面是你如何在Kotlin中创建一个companion object :
class Car {
companion object {
var category = "Sedan"
fun start() = println("The car is starting..")
}
}
一个companion object 可以被命名为如下所示:
class Car {
companion object MyObject{
var category = "Sedan"
fun start() = println("The car is starting..")
}
}
但是由于每个Kotlinclass 只能有一个companion object ,所以你不需要给它起名字。
现在你可以直接调用定义在companion object 中的方法和属性,如下图所示:
class Car {
companion object {
var category = "Sedan"
fun start() = println("The car is starting..")
}
}
Car.category = "Minivan"
Car.start()
这就是Kotlin的companion object 的全部内容。
你仍然可以在companion object 之外的同一个class 中写一个普通的方法,如下图所示:
class Car {
companion object {
var category = "Sedan"
fun start() = println("The car is starting..")
}
fun activateGps() = println("Turn on GPS")
}
要访问activateGps() 方法,你需要创建一个Car 类的实例。