在本文中,您將借助示例學(xué)習(xí)在Kotlin程序中創(chuàng)建和使用伴生對(duì)象。
在討論伴生對(duì)象之前,讓我們以一個(gè)示例來(lái)訪問(wèn)類的成員。
class Person { fun callMe() = println("I'm called.") } fun main(args: Array<String>) { val p1 = Person() //使用對(duì)象p1調(diào)用callMe()方法 p1.callMe() }
在這里,我們創(chuàng)建了 Person 類的一個(gè)對(duì)象 p1 來(lái)調(diào)用 callMe ()方法。
但是,在 Kotlin,您也可以通過(guò)使用類名(即本示例中的 Person)來(lái)調(diào)用 callMe ()方法。為此,您需要通過(guò)使用 companion 關(guān)鍵字標(biāo)記對(duì)象聲明對(duì)象聲明來(lái)創(chuàng)建一個(gè)伴生對(duì)象。
class Person { companion object Test { fun callMe() = println("I'm called.") } } fun main(args: Array<String>) { Person.callMe() }
運(yùn)行該程序時(shí),輸出為:
I'm called.
在程序中,Test對(duì)象聲明用關(guān)鍵字標(biāo)記companion以創(chuàng)建伴生對(duì)象。因此,可以callMe()通過(guò)使用以下類的名稱來(lái)調(diào)用method:
Person.callMe()
伴生對(duì)象的名稱是可選的,可以省略。
class Person { //省略了伴生對(duì)象的名稱 companion object { fun callMe() = println("I'm called.") } } fun main(args: Array<String>) { Person.callMe() }
如果您熟悉Java,您可能會(huì)將伴隨對(duì)象與靜態(tài)方法關(guān)聯(lián)起來(lái)(即使它們的內(nèi)部工作方式完全不同)
伴生對(duì)象可以訪問(wèn)該類的私有成員。因此,它們可用于實(shí)現(xiàn)工廠方法模式。