Tengo una clase de datos que tiene datos en forma de listas (objetos complementarios). Asigno estas listas a mis variables (listas) en la clase Actividad según mis requisitos. El problema es que cuando cambio alguna lista (a la que se le asignó el valor de la lista de objetos complementarios) en la clase Actividad, la lista de objetos complementarios también cambia. ¿Por qué está pasando esto? ¿Los objetos complementarios están asignados por referencia? ¿Cómo evitar esto? Quiero que si se cambia la lista de variables de la clase de actividad, la lista de objetos complementarios debe conservar su valor.
Lista de datos de mi código
class DataLists { companion object { val CountryList: List<CountryDataStructure> = listOf( CountryDataStructure(1, "USA"), CountryDataStructure(2, "Canada")) } }Clase de actividad
var CountryData = DataLists.CountryList CountryData[0].Name = "United States of America" //Here the Companion object list (CountryList) ie DataList is also changed and have //values "United States of America" and "Canada" while I expect this to have "USA" and "Canada"Todo, además de las clases en línea y las primitivas, siempre pasa por una copia de referencia, no una copia de valor profundo. Las clases en línea y las primitivas a veces se pasan por copia de valor, pero la distinción apenas importa ya que son inmutables.
Dado que su clase CountryDataStructure es mutable, debe copiar manualmente tanto la lista como los elementos de la lista, lo que se puede hacer usando la función de iterador de map y la función de copy() :
val countryData = DataLists.CountryList.map { it.copy() } countryData[0].Name = "United States of America"