在讨论伴随对象之前,让我们以一个示例来访问类的成员。
class Person {
fun callMe() = println("I'm called.")
}
fun main(args: Array) {
val p1 = Person()
// calling callMe() method using object p1
p1.callMe()
}
在这里,我们创建了Person类的对象p1来调用callMe()
方法。这就是正常情况下的工作方式。
但是,在Kotlin中,还可以通过使用类名(在这种情况下为Person callMe()
来调用callMe()
方法。为此,您需要通过使用companion
关键字标记对象声明来创建伴随对象。
示例:同伴对象
class Person {
companion object Test {
fun callMe() = println("I'm called.")
}
}
fun main(args: Array) {
Person.callMe()
}
运行该程序时,输出为:
I'm called.
在程序中, 测试对象声明用关键字partner标记,以创建伴随对象。因此,可以通过使用以下类的名称来调用callMe()
方法:
Person.callMe()
伴随对象的名称是可选的,可以省略。
class Person {
// name of the companion object is omitted
companion object {
fun callMe() = println("I'm called.")
}
}
fun main(args: Array) {
Person.callMe()
}
如果您熟悉Java,则可以将伴随对象与静态方法相关联(即使它们在内部的工作方式完全不同)。
伴随对象可以访问该类的私有成员。因此,它们可用于实现工厂方法模式。