Kotlin中的單例寫法相比較於Java要簡單許多,只需用到一個關鍵字就能夠實現,那就是object關鍵字java
好比下面DataProviderManager就是一個單例類bash
object DataProviderManager {
fun registerDataProvider(provider: DataProvider) {
// ...
}
val allDataProviders: Collection<DataProvider>
get() = // ...
}
複製代碼
調用單例類中的方法也很簡單ide
DataProviderManager.registerDataProvider(...)
複製代碼
調用格式很像Java的靜態類調用它的靜態方法。那麼Kotlin中的靜態類和靜態方法是否是和Java同樣呢?spa
下面就來講Kotlin中的靜態實現翻譯
相信你看到這個標題,也猜到Kotlin的靜態實現和Java不同了,Java的靜態實現須要用到Static關鍵字,可是Kotlin不是這樣的呢,它用的是 companion object,翻譯過來就是伴生對象code
舉個例子對象
class MyClass {
companion object{
fun create(): MyClass = MyClass()
var a = 1
}
}
複製代碼
能夠看到有一個companion object代碼塊,在這裏面能夠編寫方法和屬性,那如何調用這個類的create()方法呢?get
val instance = MyClass.create()
複製代碼
既然是和靜態方法同樣,就能夠直接類名.方法了io
注意:class
- 每一個類能夠對應一個伴生對象
- 伴生對象的成員全局只有一個
- 伴生對象的成員相似於java的靜態成員