Kotlin数据类复制function不起作用

也许我错误地解释了data类的copyfunction是如何工作的,或者可能存在一个错误,但下面是copyfunction不能按预期工作的示例:

科特林:

 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 

看来copy只是创建一个新的实例,而不是复制值。 如果我把variables放在构造函数中,这些值就被赋值了,但是和构造一个新的实例没有区别。

好的,我错过了文档中的这句话:

如果这些函数中的任何一个在类体中显式定义或者从基类inheritance,它将不会被生成。

事实上,这使得copy不比Java interop的构造器更好。

你可以做什么来解决Kotlin的copy()的限制,就是在你的数据类中创建你自己的复制函数。 示例如下:

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