智能投射不可能,因为实例是可变属性
我正在尝试在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() {} }
我上面写的是Kotlin的一个单身人士。 现在,解释您收到的消息:
智能转换到PresenterManager是不可能的,因为实例是可变的属性,可以在这个时候改变
instance
是可为空的( private var instance: PresenterManager? = null
),并且getManager
函数需要一个非null的返回类型,所以解决这个问题的方法之一是通过getManager
返回一个可为空的类型( fun getManager(): PresenterManager?
)还是利用了!!
运营商在您的返回类型。
重点是你真的不需要那个instance
变量,如果你使用一个object
而不是一个class
来声明你的单例。