基类中的变量在从派生类初始化时为 null,但从 super 调用



我在将继承的单例模式从 Java 转换为 Kotlin 时遇到问题。

open class ThumbnailManager {
lateinit var data: Data
companion object{
fun getInstance(): ThumbnailManager{
return ThumbnailManager()
}
}
open fun setContent()
open fun setData(){
data = ...// data is indeed set 
}
}
class ThumbnailManagerLite : ThumbnailManager(){
companion object{
fun getInstance(): ThumbnailManagerLite{
return ThumbnailManagerLite()
}
}
override fun setContent(){
setData()
}
}

从其中一个主类(不是精简类(中,我调用 ThumbnailManager.getInstance((.gameData,并且 gameData 为空,即使它肯定是通过 ThumbnailManagerLite 初始化的。 我注意到当我调用 ThumbnailManagerLite.getInstance(( 时,没有调用 super。

每次调用ThumbnailManager.getInstance()时,都会创建一个新的ThumbnailManager实例。在 Kotlin 中,您可以使用object关键字来实现单例模式:

object ThumbnailManager {

lateinit var data: Data
fun setContent() { 
}
fun setData() {
}
}

但它不支持继承。

您可以尝试在单一实例中使用委派而不是继承

interface IThumbnailManager {
fun setContent()
fun setData()
}
object ThumbnailManager : IThumbnailManager {
lateinit var data: Data

override fun setContent() {
}
override fun setData(){
}
}
object ThumbnailManagerLite : IThumbnailManager by ThumbnailManager {
override fun setContent(){
setData()
}
}

相关内容

  • 没有找到相关文章

最新更新