¿Cuál es la diferencia entre manejar campos a través de "accesor" y "copyr"

No entiendo la diferencia entre manejar un campo a través del acceso y el método de copy en Kotlin. Es así:

Ejemplo de accesorios:

class Person(val name: String, var age: Int) fun happyBirthday(person: Person) { person.age++ } 

Ejemplo de método de copy:

 data class Person(val name: String, var age: Int) fun happyBirthday(person: Person) { person.copy(age = person.age + 1) } 

 person.age++ 

modifica su instancia de person existente al boost su edad en 1.

 person.copy(age = person.age + 1) 

por otro lado, devuelve una nueva instancia de Person que tiene las mismas properties que la person , a exception de la age que ha especificado. Como su código de muestra es ahora, no está asignando esta nueva instancia de Person a nada, solo la está tirando.

Este método de copy es útil cuando su class es inmutable (todas sus properties son val ); en lugar de modificarla, le ofrece una manera fácil de crear una nueva instancia que tenga en su mayoría las mismas properties que el original.

  • ExpandableListView no se muestra en mi actividad
  • Unidad (C #) -> Kotlin <- Corutinas
  • Constructor secundario de Kotlin de supervalor de twig condicional de class extendida
  • (Java + Kotlin) Autocableo: se espera al less 1 bean que califique como candidato de autowire para esta dependencia
  • Anko ignorando layout_margin definido en estilo
  • Función de extensión global en kotlin
  • ¿Es una 'propiedad' privada un 'campo'?
  • ¿Cómo combinar la list dentro de una list de un tipo, en una sola list inmutable?
  • Kotlin y collections inmutables?
  • Clase extendida con muchos parameters
  • Geofence no funciona en Kotlin