![](/img/trans.png)
[英]How to keep the reference of the singleton class object in the companion object, Kotlin
[英]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.