Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin List和MutableList:两个不同的引用,指向同一个集合对象_List_Kotlin_Mutablelist - Fatal编程技术网

Kotlin List和MutableList:两个不同的引用,指向同一个集合对象

Kotlin List和MutableList:两个不同的引用,指向同一个集合对象,list,kotlin,mutablelist,List,Kotlin,Mutablelist,你能举一个这个报价的例子吗 在使用集合接口时,需要记住的一点是,只读集合不一定是不变的。如果使用的变量具有只读接口类型,则这可能只是对同一集合的多个引用之一。其他引用可以具有可变接口类型 我想编写一个函数,将元素添加到某个集合中,同时在fun main()中创建val someCollection:List。我可以通过变量someCollection:List=fundad(someCollection.toMutable)来实现这一点,但是我可以这样做而不使用变量var吗 范例 fun add

你能举一个这个报价的例子吗

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

我想编写一个函数,将元素添加到某个集合中,同时在fun main()中创建val someCollection:List。我可以通过变量someCollection:List=fundad(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)
}
fun addEl(数字:可变列表):列表{
对于(1..10中的i){
数字。添加(i)
}
返回号码。toList()
}
趣味主线(args:Array){
var readOnlyNumbers:List=emptyList()
ReadOnlyNumber=addEl(readOnlyNumber.toMutableList())
println(readOnlyNumbers.size)
}

我是否可以避免使用var和重新着色ReadOnlyNumber

以下是在不使用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 addEl(数字:可变列表):列表{
对于(1..10中的i){
数字。添加(i)
}
返回号码。toList()
}
趣味主线(args:Array){
val readOnlyNumbers:List=addEl(mutableListOf())
println(readOnlyNumbers.size)
}
或者干脆

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

fun main(args: Array<String>){
    val readOnlyNumbers = createEl()
    println(readOnlyNumbers.size)
}
fun createEl():列表{
return(1..10).toList()
}
趣味主线(args:Array){
val readOnlyNumbers=createEl()
println(readOnlyNumbers.size)
}
回答这一部分:

你能举一个这个报价的例子吗

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

这只是简单地谈论这样的情况:

val mutableList: MutableList<Int> = mutableListOf<Int>()
val list: List<Int> = mutableList
println(list) // []
mutableList.add(0)
println(list) // [0]
val mutableList:mutableList=mutableListOf()
val列表:列表=可变列表
println(列表)//[]
可变列表。添加(0)
println(列表)/[0]
尽管
list
具有类型
list
而不是
MutableList
,但其内容已更改

请注意,这是一个

我想编写一个函数,在fun main()中创建
val someCollection:List
的同时,将元素添加到某个集合中


同样,但我不建议编写此代码;使用JB Nizet的一个版本。

应该做什么?你不能只使用
val someCollection=listOf()
?如果你想给变量重新分配一个不同的列表,那么它必须是一个var,而不是val。如果你想给变量引用的列表添加一个元素,那么它必须是一个可变列表,而不是只读列表。你的问题与你的报价没有多大关系。