我试图在Kotlin中创建一个单身汉,并且遇到问题,因为我得到了smart cast to PresenterManager is impossible because instance is mutable property that could have been changed at this time
。
这似乎是制作单例的一种非常标准的方法。为什么它不让我使用,我该如何解决?
PresenterManager {
//some code
....
companion object {
private val PRESENTER_ID = "presenter_id"
private var instance: PresenterManager? = null
fun getManager(): PresenterManager {
if (instance == null) {
instance = PresenterManager(10, 30, TimeUnit.SECONDS)
}
return instance
}
}
}
最佳答案
这似乎是制作单例的一种非常标准的方法。
我建议您多读一些有关Kotlin的文章。
object PresenterManager {
init {
// init code
}
fun whatever() {}
}
我上面写的是科特林的一个单例。现在,解释一下您得到的消息:
无法将智能类型转换为PresenterManager,因为实例是可变属性,该属性可能在此时已被更改
instance
是可为空的(private var instance: PresenterManager? = null
),并且getManager
函数需要一个非空的返回类型,因此解决此问题的多种方法之一是通过使getManager
返回可为空的类型(fun getManager(): PresenterManager?
)或在您的返回类型上使用!!
运算符。要点是,如果您使用
instance
而不是object
来声明您的单例,则实际上根本不需要该class
变量。关于java - 由于实例是可变属性,因此无法进行智能转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47128645/