您能举一个例子吗?
使用集合接口时要记住的一件事是只读集合不一定是不变的。如果您使用的是具有只读接口类型的变量,则该变量可能只是对同一集合的众多引用之一。其他引用可以具有可变的接口类型
我想编写一个函数,将元素添加到某个集合中,同时创建一个有趣的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和reassigment readOnlyNumbers?
答案 0 :(得分:1)
有多种不用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)
}
答案 1 :(得分:0)
要回答这一部分:
您能举一个例子吗?
使用集合接口时要记住的一件事是只读集合不一定是不变的。如果您使用的是具有只读接口类型的变量,则该变量可能只是对同一集合的众多引用之一。其他引用可以具有可变的接口类型
这只是在谈论这样的情况:
val mutableList: MutableList<Int> = mutableListOf<Int>()
val list: List<Int> = mutableList
println(list) // []
mutableList.add(0)
println(list) // [0]
即使list
的类型为List<Int>
而不是MutableList<Int>
,其内容也已更改。
请注意,这是一个示例
我想编写一个在一些元素上添加元素的函数,同时在有趣的main()中创建一个
val someCollection: List <>
。
也一样,但我不建议编写此代码;搭配JB Nizet的版本之一。