【问题标题】:'Var' must be initialized Kotlin'Var' 必须在 Kotlin 中初始化
【发布时间】:2020-03-22 17:07:40
【问题描述】:

你们中的一些人可以帮我解决这个小问题吗?我对 Kotlin 和 Android 开发非常陌生!我不明白为什么这段代码的 sn-p 会返回以下错误:

class Catalog {
var musicList: List<Music> = ArrayList()
}

class Music{
    var id: String = ""
}

fun main(args: Array<String>) {  
    var test: Catalog
    test.musicList[0] = "1"  
}

错误:

Variable 'test' must be initialized

怎么了? 谢谢大家!

【问题讨论】:

  • 你没有初始化test

标签: java class kotlin methods instance


【解决方案1】:

你需要在调用musicList的getter之前实例化它:

fun main(args: Array<String>) {  
    var test = Catalog()
    test.musicList[0] = "1"  
}

此外,如果您不重新分配test 的值,您可以将其声明为val

fun main(args: Array<String>) {  
    val test = Catalog()
    test.musicList[0] = "1"  
}

之后你还会有另外 2 个错误:

  1. 因为List 是不可变的,所以您不能使用运算符[] 来赋值

要解决它,您可以使用MutableList 而不是List

class Catalog {
    val musicList = mutableListOf<Music>()
}
  1. 您在索引 0 处没有项目,因此您会遇到越界异常。 要解决它,您可以添加元素:
fun main(args: Array<String>) {  
    var test = Catalog()
    test.musicList += Music("1")  
}

【讨论】:

    【解决方案2】:

    在 Kotlin 中,您可以通过两种方式初始化变量。

    1. 使用默认值初始化... var temp:String = ""
    2. 使用 lateinit 关键字初始化(意味着稍后再初始化),例如... lateinit var temp:String

    在您的情况下,您不使用 lateinit 因此,您需要使用默认值初始化变量

    var test = Catalog()
    

    或者如果你想初始化为 null

    var test:Catalog? = null
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      相关资源
      最近更新 更多