我正在Kotlin中开发一个单例类,但我想检查一下Lateinit var“ instance”是否已初始化,而不是检查是否为null,但是它不起作用。我认为最好像Lateinit一样初始化var,而不像null var那样初始化。
firebase login
编译器向我显示下一个错误: enter image description here
答案 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
}
}