具有isInitialized检查的Singleton

时间:2018-11-29 09:09:51

标签: android kotlin

我正在Kotlin中开发一个单例类,但我想检查一下Lateinit var“ instance”是否已初始化,而不是检查是否为null,但是它不起作用。我认为最好像Lateinit一样初始化var,而不像null var那样初始化。

firebase login

编译器向我显示下一个错误: enter image description here

3 个答案:

答案 0 :(得分:4)

我认为,最好使用lazy函数在初次请求时延迟初始化值来完成您要达到的目标。有关详细信息,请参见here

例如

companion object {
    val instance: GameDAO by lazy { GameDAO() }
}

您不需要单独的getInstance函数:您可以直接访问instance属性,它将在第一次请求时初始化(以线程安全的方式)。

这是假设您只希望在首次请求时初始化对象(即延迟初始化)。如果您希望始终创建它,则可以对其进行构造,然后立即将其分配给变量/属性。

答案 1 :(得分:1)

object GameDao {
    fun hereGoesYourFunctions()
}

在此处调用GoesYourFunctions将初始化GameDao类。

答案 2 :(得分:0)

您可以尝试更好的方法:

class SingletonClass private constructor() {

init {
    println("This ($this) is a singleton")
}

private object Holder {
    val INSTANCE = SingletonClass()
}

companion object {
    val instance: SingletonClass by lazy {
        Holder.INSTANCE
    }
}