Kotlin中的克隆对象

问题描述 投票:0回答:1

我有3个班级,如下:

Company.kt类:

data class Company(var comCode:String= "",var comName:String=""):Cloneable{
fun copy() : Company {
  //uses the fields name and property defined in the constructor
  return Company(comCode,comName)
}

override fun clone(){
    super.clone()
}
}

Emp.kt类:

 data class Emp(var name:String,var empCode:String,var nameArray:MutableList<Company>){

fun copy() : Emp {
  //uses the fields name and property defined in the constructor
  return Emp(name,empCode,nameArray)
}

//or if you need a copy with a changed field
fun copy(changeArray :MutableList<Company>) : Emp {
  return Emp(name,empCode ,changeArray)
}

}

DeepCopy.kt类:

fun main(args:Array<String>){

var company1 = Company("com1","company1")
var company2 = Company("com2","company2")
var company3 = Company("com3","company3")
var company4 = Company("com4","company4")
var company5 = Company("com5","company5")

var list:MutableList<Company> =mutableListOf();
    list.add(company1)
    list.add(company2)
    list.add(company3)
    list.add(company4)
    list.add(company5)
val emp = Emp("krishan","oms360",list)
println("old emp>>>>>>> "+emp.nameArray[1].comCode)
val listtemp = emp.nameArray
listtemp[1].comCode= "COM10";
//var cloneEmp = emp.copy(listtemp)//.apply { this.nameArray[1].comCode= "COM10"; }
//cloneEmp.nameArray[1].comCode= "COM10";
//cloneEmp.empCode = "oms400"
println("new emp>>>>>>> "+emp.nameArray[1].comCode)

}

当我从emp对象中这样获得新对象中的nameArray时>

val listtemp = emp.nameArray
listtemp[1].comCode= "COM10"; 

并更改列表的第一个位置的值,在该打印emp对象之后,该对象的print更改()。

结果:

old emp>>>>>>> com2
new emp>>>>>>> COM10

我有以下3个类:Company.kt类:数据类Company(var comCode:String =“”,var comName:String =“”):Cloneable {fun copy():Company {//使用字段名称和属性...

java android kotlin jetbrains-ide
1个回答
0
投票

我认为代码的过分注释部分是您尝试进行深度复制的地方,并且最终也更改了emp对象,否则您的问题没有意义,因为代码明显更改了emp对象。如果我认为正确,请尝试将copy()函数更改为:

© www.soinside.com 2019 - 2024. All rights reserved.