首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将类对象正确保存为ArrayList

无法将类对象正确保存为ArrayList
EN

Stack Overflow用户
提问于 2021-02-15 08:25:11
回答 2查看 53关注 0票数 0

我创建了类对象和一个类对象的空ArrayList。我将带有一些参数的类对象添加到ArrayList中,然后更改了该对象的一些参数。但是ArrayList中的类对象也发生了变化。看上去我是在引用参数。另外,如果我试图创建新对象并使其与"=“相等,则该对象将连接到旧对象,因此,如果我要更改第一个对象,那么第二个对象也会发生变化,就像引用第一个变量一样。我在Java中遇到了同样的问题(不足为奇)。那么,如何通过值传递类对象呢?我希望使用一个类对象向ArrayList中添加新对象,然后在不改变ArrayList中的类对象的情况下更改它。

代码语言:javascript
运行
复制
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
}

与创建新对象相同

代码语言:javascript
运行
复制
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代码发送答案

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-15 08:59:19

基本上是用修改后的值一次又一次地添加相同的TestClass实例,因此数组位置3中的实例也将指向1的同一个实例,如果您确实想要不同的值,则需要创建不同的实例,或者在copy中使用数据类将值复制到不同的实例中,并且可以命名参数以更改所需的值。

代码语言:javascript
运行
复制
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)
}
票数 0
EN

Stack Overflow用户

发布于 2021-02-15 08:56:19

复制

若要复制对象以更改其某些属性,但其馀属性保持不变,请使用copy()函数。

代码语言:javascript
运行
复制
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)  
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66204727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档