当前位置: 首页 > 知识库问答 >
问题:

智能转换是不可能的,因为实例是可变属性

申屠无尘
2023-03-14

我正在尝试在 Kotlin 中生成一个单例,并且遇到了问题,因为我无法智能地转换为演示者管理器是不可能的,因为实例是此时可以更改的可变属性

这似乎是制作单例的一种非常标准的方法。为什么它不让我,我该如何解决它?

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个答案

傅阳
2023-03-14

这似乎是一个非常标准的生单胞胎的方式。

我建议你多读一些关于科特林的书。

object PresenterManager {
    init {
       // init code
    }

    fun whatever() {}
}

我上面写的是科特林的一个单身汉。现在,解释一下你得到的信息:

无法对PresenterManager进行智能强制转换,因为实例是可变属性,可能已在此时更改

实例可为空(私有var实例:PresentManager?=null),并且getManager函数需要非空返回类型,因此解决此问题的多种方法之一是使getManager返回可为空的类型(有趣的getManager(): PresentManager?)或在返回类型上使用运算符。

主要的一点是,如果使用<code>对象

 类似资料: