Kotlin - 伴随对象在变量更改时更改其值

Kotlin - Companion Object changes it value when the variable is changed

我有一个数据 class,它有列表(伴随对象)形式的数据。我根据我的要求将这些列表分配给 Activity class 中的变量(列表)。 问题是,当我更改 Activity class 中的某些列表(已分配伴随对象列表值)时,伴随对象列表也会更改。 为什么会这样? Companion 对象是按引用分配的吗?如何避免这种情况? 我想如果 Activity class 的变量列表被更改,那么伴随对象列表应该保留它的值。

我的代码 数据列表

class DataLists {
    companion object {
        val CountryList: List<CountryDataStructure> = listOf(
            CountryDataStructure(1, "USA"),
            CountryDataStructure(2, "Canada"))
    }
}

Activity Class

var CountryData = DataLists.CountryList
CountryData[0].Name = "United States of America" 
//Here the Companion object list (CountryList) i.e. DataList is also changed and have 
//values "United States of America" and "Canada" while I expect this to have "USA" and "Canada"

除了内联 classes 和基元之外的所有内容 总是 通过引用副本传递,而不是深度值副本。内联 classes 和原语有时通过值副本传递,但区别并不重要,因为它们是不可变的。

由于您的 CountryDataStructure class 是可变的,您需要手动复制列表和列表中的项目,这可以使用 map 迭代器函数和数据 class copy() 函数:

val countryData = DataLists.CountryList.map { it.copy() }
countryData[0].Name = "United States of America"