如何在不更改Kotlin中的基础对象的情况下将对象复制到另一个对象?

Sad*_*ife 8 object duplicates kotlin

这是我的代码:

var header1: Record? = null
var header2: Record? = null

header2 = header1
header2.name = "new_name"
Run Code Online (Sandbox Code Playgroud)

但也有header1.name变化!

Jos*_*cik 16

您只是将同一个对象(相同的内存块)分配给另一个变量.您需要以某种方式创建新实例并设置所有字段.

header2 = Record()
header2.name = header1.name
Run Code Online (Sandbox Code Playgroud)

但是在Kotlin中,如果Record类是Data类,Kotlin会为你创建一个复制方法.

data class Record(val name: String, ...)
...
header2 = header1.copy()
Run Code Online (Sandbox Code Playgroud)

copy方法允许您覆盖需要覆盖的字段.

header2 = header1.copy(name = "new_name")
Run Code Online (Sandbox Code Playgroud)