La function de copy de class de datos Kotlin no funciona

Tal vez estoy malinterpretando cómo funciona la function de copy de una class de data o tal vez hay un error, pero el siguiente es un ejemplo de que la function de copy no funciona como se esperaba:

Kotlin:

 data class A { public var x: String? = null public var y: String? = null public var z: B = B.ONE } enum class B { ONE TWO THREE } 

Java

 A a1 = new A() a1.setX("Hello") a1.setY("World") a1.setZ(B.TWO) A a2 = a1.copy() // a2.x is null // a2.y is null // a2.z is B.ONE 

Parece que copy es solo hacer una nueva instancia de A y no copyr los valores. Si pongo las variables en el constructor, los valores son asignados, pero luego no es diferente a build una nueva instancia.

De acuerdo, me perdí esta oración en los documentos:

Si alguna de estas funciones se define explícitamente en el cuerpo de la class o se henetworkinga de los types base, no se generará.

Lo cual, de hecho, hace que copy no sea mejor que un constructor para la interoperabilidad de Java.

Lo que puede hacer para evitar las limitaciones de la copy de Kotlin (), es crear su propia function de copy dentro de su class de datos. Ejemplo a continuación:

 data class User(val name : String, val property: String) { fun copy() : User { //uses the fields name and property defined in the constructor return User(name,property) } //or if you need a copy with a changed field fun copy(changedProperty : String) : User { return User(name, changedProperty) } } 
  • Kotlin Assign Delegate después de statement de variable
  • Kotlin: ejecuta una testing de integración, el error `diversión principal ya está definido`
  • ¿Qué modificador de acceso para los methods de ayuda comprobables?
  • Convención de nomenclatura de Kotlin para methods de retorno booleans
  • ViewPager muestra Textviews desde el primer fragment
  • "Nombre de campo BSON no válido" durante la inserción
  • ¿Cómo implementar el patrón Builder en Kotlin?
  • Procesamiento de annotations con kotlin-maven-plugin
  • Obtener location Android Kotlin
  • Kotlin: cómo implementar un ItemClickListener para RecyclerVIew
  • Principal Ui congela