繁体   English   中英

由于实例是可变属性,因此无法进行智能投射

[英]smart cast impossible because instance is mutable property

我试图在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是可为null的( private var instance: PresenterManager? = null ),并且getManager函数期望返回非null的返回类型,因此解决此问题的多种方法之一是使getManager返回可为null的类型( fun getManager(): PresenterManager? )或使用!! 返回类型上的运算符。

要点是,如果您使用object而不是class来声明您的单例,那么您实际上根本不需要该instance变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM