Avatar ·

如何在Kotlin中克隆对象?可变性与引用问题

大家好!我刚开始学习Kotlin,在克隆对象时遇到了问题。在Java中,我使用`Cloneable`接口的`clone()`方法,但在Kotlin中,一切似乎有所不同。 我有一个简单的data class `User`: ```kotlin data class User(val name: String, var age: Int, val hobbies: MutableList) ``` 我创建了一个对象,并希望制作它的完整副本,以便对副本的修改不会影响原始对象。但当我简单地将一个对象赋值给另一个时,这创建的是新引用,而不是副本: ```kotlin val user1 = User("Alice", 25, mutableListOf("reading", "swimming")) val user2 = user1 // 这不是副本,而是引用! user2.age = 30 println(user1.age) // 输出30,但应该是25!修改影响了原始对象。 ``` 我尝试对data class使用`copy()`,但这只对基本类型字段有效。当我修改副本中的`hobbies`列表时,修改仍然会反映在原始对象中: ```kotlin val user3 = user1.copy(age = 35) u