【问题标题】:'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
怎么了?
谢谢大家!
【问题讨论】:
标签:
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 个错误:
- 因为
List 是不可变的,所以您不能使用运算符[] 来赋值
要解决它,您可以使用MutableList 而不是List。
class Catalog {
val musicList = mutableListOf<Music>()
}
- 您在索引 0 处没有项目,因此您会遇到越界异常。
要解决它,您可以添加元素:
fun main(args: Array<String>) {
var test = Catalog()
test.musicList += Music("1")
}
【解决方案2】:
在 Kotlin 中,您可以通过两种方式初始化变量。
- 使用默认值初始化... var temp:String = ""
- 使用 lateinit 关键字初始化(意味着稍后再初始化),例如... lateinit var temp:String
在您的情况下,您不使用 lateinit 因此,您需要使用默认值初始化变量
var test = Catalog()
或者如果你想初始化为 null
var test:Catalog? = null