我创建了类对象和一个类对象的空ArrayList。我将带有一些参数的类对象添加到ArrayList中,然后更改了该对象的一些参数。但是ArrayList中的类对象也发生了变化。看上去我是在引用参数。另外,如果我试图创建新对象并使其与"=“相等,则该对象将连接到旧对象,因此,如果我要更改第一个对象,那么第二个对象也会发生变化,就像引用第一个变量一样。我在Java中遇到了同样的问题(不足为奇)。那么,如何通过值传递类对象呢?我希望使用一个类对象向ArrayList中添加新对象,然后在不改变ArrayList中的类对象的情况下更改它。
class TestClass(var someData : Int = 0)
fun main(){
var testArrayList = arrayListOf<TestClass>()
var classObject : TestClass = TestClass(3)
testArrayList.add(classObject)
classObject.someData = 5
testArrayList.add(classObject)
classObject.someData = 7
testArrayList.add(classObject)
print(testArrayList[0].someData)
print(testArrayList[1].someData)
print(testArrayList[2].someData) //Output = 777. Needed 357
}
与创建新对象相同
class TestClass(var someData : Int = 0)
fun main(){
var testArrayList = arrayListOf<TestClass>()
var classObject : TestClass = TestClass(3)
var secondClassObject : TestClass = classObject
testArrayList.add(secondClassObject)
classObject.someData = 5
var thirdClassObject : TestClass = classObject
testArrayList.add(thirdClassObject)
classObject.someData = 7
var fourthClassObject : TestClass = classObject
testArrayList.add(classObject)
print(testArrayList[0].someData)
print(testArrayList[1].someData)
print(testArrayList[2].someData) //Output = 777. Needed 357
}
您尝试在Java中生成类似的代码,因为Java中的arrayList在这种情况下的工作方式是相同的。所以,您可以用Java代码发送答案
发布于 2021-02-15 08:59:19
基本上是用修改后的值一次又一次地添加相同的TestClass
实例,因此数组位置3
中的实例也将指向1
的同一个实例,如果您确实想要不同的值,则需要创建不同的实例,或者在copy
中使用数据类将值复制到不同的实例中,并且可以命名参数以更改所需的值。
data class TestClass(var someData : Int = 0)
fun main(){
var testArrayList = arrayListOf<TestClass>()
var classObject : TestClass = TestClass(3)
testArrayList.add(classObject)
testArrayList.add(classObject.copy(someData = 5))
testArrayList.add(classObject.copy(someData = 7))
print(testArrayList[0].someData)
print(testArrayList[1].someData)
print(testArrayList[2].someData)
}
发布于 2021-02-15 08:56:19
若要复制对象以更改其某些属性,但其馀属性保持不变,请使用copy()函数。
class TestClass(var someData : Int = 0) {
fun copy(someData: Int = this.someData) = TestClass(someData)
}
fun main(){
var testArrayList = arrayListOf<TestClass>()
var classObject : TestClass = TestClass(3)
testArrayList.add(classObject)
testArrayList.add(classObject.copy(someData = 5))
testArrayList.add(classObject.copy(someData = 7))
print(testArrayList[0].someData)
print(testArrayList[1].someData)
print(testArrayList[2].someData)
}
https://stackoverflow.com/questions/66204727
复制相似问题