簡體   English   中英

為什么在 Kotlin 中使用配套的 object 來制作 singleton?

[英]Why use companion object to make singleton in Kotlin?

我正在研究 android kotlin 中的創建模式(單例模式)。

我對同伴 object 和 ZA8CFDE6331BD59EB2AC96F8911C4B6 制作 singleton object 的區別有疑問。

在某些示例中,單例是這樣制作的。

class ABC {
  companion object {
    private var sInstance: ABC? = null
    
    fun getInstance(): ABC {
        if (sInstance == null) sInstance = ABC()
        return sInstance ?: throw IllegalStateException("")
    }
  }
}

但通過上述方法,

// a and b are not same object
val a = ABC()
val b = ABC.getInstance()

println(a == b) // false

但據我所知, kotlin 中的 singleton 只是object

所以,我的問題是“為什么,當使用伴侶 object 來制作 singleton 對象時”

getInstance()只是創建單例的“傳統”方式。 這是一種常見的技術,例如 Java,因為與 Kotlin 相反,Java 沒有語言本身提供的單例。 出於這個原因,您也會不時在 Kotlin 中看到getInstance() 可能是從 Java 移植過來的代碼,可能是對 Java 有更多經驗的人開發的,所以他們不知道 Z539A3A5859D24FB7B129E74D61F 等有沒有更好的替代方案。

此外, object幾乎是 static。 如果我們有更復雜的邏輯來創建 singleton,則可能需要通過某種工廠(例如伴隨對象)來創建它。

所以我想說,經驗法則是使用object作為默認值,只有在不可能的情況下,手動創建它。 在后一種情況下,使用屬性而不是getInstance() function 更像是“Kotlin-ish”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM