我有一个数据类,它有列表形式的数据(伴随对象).我根据自己的要求将这些列表分配给活动类中的变量(列表).

我的密码

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

活动课

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"

推荐答案

除了内联类和原语之外,所有内容都是通过引用副本传递的,而不是深度值副本.内联类和原语有时是通过值copy传递的,但这种区别并不重要,因为它们是不可变的.

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

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

Kotlin相关问答推荐

使用Jackson反序列化HTML列表时出现MismatchedInputResponse

用普通Kotlin理解Gradle的Kotlin DSL'""

如何注入返回通用列表的转换器?

Gradle:无法创建 ExtensiblePolymorphicDomainObjectContainer

如何避免键盘打开时jetpack compose 内容上升

Kotlin 列表扩展功能

通过顺序多米诺骨牌操作列表管理对象的最佳方法是什么?

为 Gradle 子项目配置 Kotlin 扩展

是什么让 Kotlin 中的 String 类能够使用方括号?

使用 Kotlin 协程时 Room dao 类出错

参考 Kotlin 中的 Java 接口静态字段

如何在 Kotlin 中创建一个打开新活动(Android Studio)的按钮?

androidx.core:core-ktx:1.0.0 小部件包丢失

将协同路由调用放在存储库或ViewModel中哪个更好?

如何在Spring Boot应用程序上启用承载身份验证?

如果 Maybe 完成,则从其他来源将 Maybe 转换为 Single

面临一些未知问题一些后端jvm内部错误

禁用 IntelliJ kotlin * 导入?

Kotlin 警告:Conditional branch result of type ... is implicity cast of Any?

spring.config.location 在 Spring Boot 2.0.0 M6 上不起作用