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