我有一個資料類,它具有串列(伴隨物件)形式的資料。我根據我的要求將這些串列分配給 Activity 類中的變數(串列)。問題是,當我在 Activity 類中更改一些串列(分配了伴隨物件串列值)時,伴隨物件串列也被更改。為什么會這樣?Companion 物件是通過參考分配的嗎?如何避免這種情況?我想如果 Activity 類的變數串列被更改,那么伴隨物件串列應該保留它的值。
我的代碼資料串列
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"
uj5u.com熱心網友回復:
除了行內類和原語之外的所有內容總是由參考副本傳遞,而不是深度值副本。行內類和原語有時通過值副本傳遞,但區別并不重要,因為它們是不可變的。
由于您的CountryDataStructure類是可變的,因此您需要手動復制串列和串列中的專案,這可以使用map迭代器函式和資料類copy()函式來完成:
val countryData = DataLists.CountryList.map { it.copy() }
countryData[0].Name = "United States of America"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/443738.html
上一篇:Kotlin-向空陣列添加值
