智能投射不可能,因为实例是可变属性

我正在尝试在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来声明你的单例。