Oya*_*Oya 7 android kotlin kotlin-extension kotlin-android-extensions
我是Kotlin的新手,正在尝试制作对象列表的副本。我遇到的问题是,当我更改新副本中的项目时,旧列表也会被更改。这是对象:
class ClassA(var title: String?, var list: ArrayList<ClassB>, var selected: Boolean)
class ClassB(val id: Int, val name: String)
Run Code Online (Sandbox Code Playgroud)
我尝试这样做,但是不起作用:
val oldList:ArrayList<ClassA>
val newList :ArrayList<ClassA> = ArrayList()
newList.addAll(oldList)
Run Code Online (Sandbox Code Playgroud)
小智 13
var oldList: List<ClassA>?
val newList = oldList.map { it.copy() }
Run Code Online (Sandbox Code Playgroud)
那是因为您要将所有对象引用添加到另一个列表,因此您没有进行适当的复制,因此两个列表中的元素相同。如果要使用不同列表和不同引用,则必须在新列表中克隆每个对象:
public data class Person(var n: String)
fun main(args: Array<String>) {
//creates two instances
var anna = Person("Anna")
var Alex =Person("Alex")
//add to list
val names = arrayOf(anna , Alex)
//generate a new real clone list
val cloneNames = names.map{it.copy()}
//modify first list
cloneNames.get(0).n = "Another Anna clone"
println(names.toList())
println(cloneNames.toList())
}
[Person(n=Anna), Person(n=Alex)]
[Person(n=Another Anna clone), Person(n=Alex)]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5843 次 |
最近记录: |