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

时间:2017-11-06 01:50:41

标签: java android kotlin

我试图在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
        }
    }
}

1 个答案:

答案 0 :(得分:1)

  

这似乎是制作单身人士的一种非常标准的方法。

我建议你多阅读一下Kotlin。

object PresenterManager {
    init {
       // init code
    }

    fun whatever() {}
}

我上面写的是Kotlin中的Singleton。现在,解释一下你得到的信息:

  

智能转换为PresenterManager是不可能的,因为实例是可变属性,此时可能已更改

instance可以为空(private var instance: PresenterManager? = null),而getManager函数需要非null返回类型,因此解决此问题的方法之一是make {{1返回可以为空的类型(getManager)或在返回类型中使用fun getManager(): PresenterManager?运算符。

重点是,如果您使用!!而不是instance声明您的单身人士,则根本不需要object变量。