您可以举一个引号的例子:
使用收集界面时要牢记的关键是,只读的收藏不一定是不可变的。如果您使用具有仅读取接口类型的变量,那么这可能只是对同一集合的众多参考之一。其他参考可以具有可变的接口类型
我想编写一个函数,在创建val somecollection时,将元素添加到某些集合中:list<>在Fun Main((中。我可以通过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和放心读取透明仪?
这是在不使用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)
}
回答此部分:
您可以举个例子:
使用收集界面时要牢记的关键是,只读的收藏不一定是不可变的。如果您使用具有仅读取接口类型的变量,那么这可能只是对同一集合的众多参考之一。其他参考可以具有可变的接口类型
这只是在谈论这样的情况:
val mutableList: MutableList<Int> = mutableListOf<Int>()
val list: List<Int> = mutableList
println(list) // []
mutableList.add(0)
println(list) // [0]
即使list
具有List<Int>
类型而不是MutableList<Int>
,其内容已更改。
请注意,这是
的示例我想编写一个函数,将元素添加到某些集合中,而在Fun Main((中创建
val someCollection: List <>
。
也是如此,但我不建议编写此代码;使用JB Nizet的一种版本。