首页 > 解决方案 > Kotlin List 和 MutableList:两个不同的引用,指向同一个集合对象

问题描述

你能举一个例子来说明这个引用:

使用集合接口时要记住的关键是只读集合不一定是不可变的。如果您正在使用具有只读接口类型的变量,则这可能只是对同一集合的众多引用之一。其他引用可以具有可变接口类型

我想编写一个将元素添加到某个集合的函数,同时在有趣的 main() 中创建一个 val someCollection: List <>。我可以通过 var someCollection: List <> = funAdd(someCollection.toMutable) 来做到这一点,但是我可以在不使用变量 var 的情况下这样做吗?

例子

fun addEl(numbers:MutableList<Int>):List<Int>{
    for (i in 1..10){
        numbers.add(i)
    }
    return numbers.toList()
}

fun main(args: Array<String>){
    var readOnlyNumbers: List<Int> = emptyList()
    readOnlyNumbers = addEl(readOnlyNumbers.toMutableList())
    println(readOnlyNumbers.size)
}

我可以避免使用 var 和重新分配 readOnlyNumbers 吗?

标签: listkotlinmutablelist

解决方案


以下是不使用 var 重写代码的各种方法:

fun addEl(numbers:MutableList<Int>):List<Int>{
    for (i in 1..10) {
        numbers.add(i)
    }
    return numbers.toList()
}

fun main(args: Array<String>){
    val readOnlyNumbers: List<Int> = addEl(mutableListOf())
    println(readOnlyNumbers.size)
}

或者干脆

fun createEl(): List<Int> {
    return (1..10).toList()
}

fun main(args: Array<String>){
    val readOnlyNumbers = createEl()
    println(readOnlyNumbers.size)
}

推荐阅读