Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

670
Vistas
Kotlin: el objeto complementario cambia su valor cuando se cambia la variable

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"
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

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"
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda