Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 智能强制转换不可能,因为实例是可变属性_Java_Android_Kotlin - Fatal编程技术网

Java 智能强制转换不可能,因为实例是可变属性

Java 智能强制转换不可能,因为实例是可变属性,java,android,kotlin,Java,Android,Kotlin,我试图在Kotlin中创建一个单例,但遇到了问题,因为我无法对PresenterManager进行智能转换,因为实例是可变属性,此时可能已更改 这似乎是一种相当标准的单身方式。为什么它不让我,我怎么能修复它 PresenterManager { //some code .... companion object { private val PRESENTER_ID = "presenter_id" private var instance

我试图在Kotlin中创建一个单例,但遇到了问题,因为我无法对PresenterManager进行
智能转换,因为实例是可变属性,此时可能已更改

这似乎是一种相当标准的单身方式。为什么它不让我,我怎么能修复它

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
        }
    }
}
这似乎是一种相当标准的单身方式

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

object PresenterManager {
    init {
       // init code
    }

    fun whatever() {}
}
我上面写的是科特林的一个单身汉。现在,要解释您得到的信息:

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

instance
可为null(
private-var-instance:PresenterManager?=null
),并且
getManager
函数需要非null返回类型,因此解决此问题的多种方法之一是使
getManager
返回可为null的类型(
fun-getManager():PresenterManager?
)或者使用
运算符

主要的一点是,如果您使用
对象而不是
类来声明您的单例,那么实际上根本不需要
实例
变量

这似乎是一种相当标准的单身方式

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

object PresenterManager {
    init {
       // init code
    }

    fun whatever() {}
}
我上面写的是科特林的一个单身汉。现在,要解释您得到的信息:

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

instance
可为null(
private-var-instance:PresenterManager?=null
),并且
getManager
函数需要非null返回类型,因此解决此问题的多种方法之一是使
getManager
返回可为null的类型(
fun-getManager():PresenterManager?
)或者使用
运算符


主要的一点是,如果您使用
对象而不是
类来声明您的单例,那么实际上根本不需要
实例
变量。

Kotlin已经有了单例实现。查看文档Kotlin的可能副本已经有了Singleton实现。查看文档可能重复的或
实例
可以设置为非空,也可以通过lazy{PresenterManager()}
使用
延迟实例化。我回答这个问题的重点不是关于使
实例
非空的选项,而是首先解释不需要它,并解释lint错误背后的原因:)或者
实例
可以变为非空,也可以由lazy{PresenterManager()}使用
惰性实例化
。我回答这个问题的重点不是关于使
实例
为非空的选项,而是首先解释不需要它,并解释lint错误背后的原因:)