Kotlin在数据类中的复制是浅复制吗?

Jim*_*Jim 2 kotlin

所以我有以下数据类:

data class Client(val name: String, val pastAddresses: ArrayList<String>)
Run Code Online (Sandbox Code Playgroud)

从以下代码:

val aClient = Client("Alice", arrayListOf("foo", "bar"))
println(aClient)
val cClient = aClient.copy()
cClient.pastAddresses.add("Blah")
cClient.pastAddresses.remove("foo")
println(aClient)  
Run Code Online (Sandbox Code Playgroud)

我懂了:

Client(name=Alice, pastAddresses=[foo, bar])
Client(name=Alice, pastAddresses=[bar, Blah])
Run Code Online (Sandbox Code Playgroud)

这意味着Kotlin的数据类中的复制是浅复制。
有没有办法进行深复制?

men*_*urg 6

你是对的。默认copy()方法创建浅表副本。

查看Kotlin 文档

通常情况下,我们需要复制一个对象,改变它的一些属性,但保持其余属性不变。这就是 copy() 函数的生成目的。

您可以覆盖它,以便它执行您需要的操作。但我建议您创建一个新方法来创建深层副本,将其命名为deepCopy()。为什么更好?因为如果您的应用程序增长,您仍然可能需要浅拷贝。这就是为什么使用两种不同的方法可以帮助清楚地区分它。