Функция копирования класса данных Kotlin не работает

Возможно, я неверно истолковываю, как работает функция copy класса data или, возможно, есть ошибка, но следующий пример функции copy не работает должным образом:

Котлин:

 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 } 

Ява

 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 

Кажется, что copy просто создает новый экземпляр A и не копирует значения. Если я поместил переменные в конструктор, значения будут назначены, но тогда это ничем не отличается от создания нового экземпляра.

Хорошо, я пропустил это предложение в документах:

Если какая-либо из этих функций явно определена в теле класса или унаследована от базовых типов, она не будет сгенерирована.

Что, infact, делает copy не лучше, чем конструктор для Java interop.

Что вы можете сделать, чтобы обойти ограничения копии Kotlin (), заключается в создании вашей собственной функции копирования внутри вашего класса данных. Пример:

 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) } }