首页 > 解决方案 > 在 kotlin 中克隆一个对象

问题描述

我已将我的应用程序从 Java 迁移到 Kotlin。在 Java 中,复制工作得很好。但是,当迁移到 Kotline 时,它​​无法正常工作。之后,我开始了解 Kotlin 中的复制方法

我已经绑定了这个,但似乎我做错了什么。

这是我的功能:

fun updateSwitchState(deviceName: String, switchNumber: Int): AuraSwitch? {
    val singleDevice = Switch()
    for (c in FourNodeDevice) {
        if (deviceName == c.name) {
            val copyDevice : SwitchClone = SwitchClone(c.state, c.name)
            val state = copyDevice.copy(state = copyDevice.state)
            state.updateState(switchNumber)
            singleDevice.state = state.state
            return singleDevice
        }
    }
    return null
}

每当我state在 updateState 方法中更改对象中的数据时,对象中的值c也会更改。任何帮助都会很有用

标签: androidkotlin

解决方案


您永远不会创建state对象的副本。

此调用创建另一个 SwitchClone,其值与copyDevice自身相同。

val state = copyDevice.copy(state = copyDevice.state)

copy()只创建一个浅拷贝,这意味着你的所有对象,在这种情况下ccopyDevicestate指向同一个c.state.

您需要显式创建状态对象的深层副本(取决于哪些属性是可变的)并将其分配给copyDevice.state字段。


推荐阅读