Taiwan Kotlin User Group 的網站,在台灣推廣 Kotlin 程式語言,舉辦相關活動。如果對 Kotlin 有興趣,想要多瞭解一些,歡迎來我們的社群一起聚會!
除了在 Kotlin Object 範例
提到全域物件的用法
有時候我們會需要某個類別
和某個全域物件進行關聯
這時我們可以用 companion object
關鍵字宣告
class MyClass {
companion object Factory {
var number = 0
fun create(): MyClass = MyClass()
}
}
使用時可以像存取靜態函數這樣
直接呼叫 MyClass.number
或 MyClass.create()
MyClass.number++
println(MyClass.number) // 1
MyClass.create() // 建立 MyClass
雖然看起來像是靜態屬性或靜態函數
但是 companion object
是一個實體物件
所以實體物件能做的事都可以實現
比方說繼承某個介面
interface Factory<T> {
fun create(): T
}
class MyClass {
companion object : Factory<MyClass> {
override fun create(): MyClass = MyClass()
}
}
val f: Factory<MyClass> = MyClass
想看更多範例嗎?
可以看看
或加入 kotlin.tips 的 Kotlin 讀書會 !