Kotlin数据类复制功能不起作用

Mic*_*rdo 4 java kotlin data-class

也许我误解copydata类的功能是如何工作的,或者可能存在错误,但以下是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
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

它似乎copy只是创建一个新的实例A而不是复制值.如果我将变量放在构造函数中,则会分配值,但这与构造新实例没有什么不同.

Mic*_*rdo 7

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

如果这些函数中的任何一个在类体中显式定义或从基类型继承,则不会生成它们.

事实上,这copy并不比Java互操作的构造函数更好.

  • 看起来您的示例没有显示全部内容:在您提供的代码中,无参数版本的copy()根本不适用于Java,并且似乎没有明确定义“ copy()”的短语。相关的。无论如何,`copy()`的设计基于默认参数机制,该机制仅在Kotln中可用,而在Java中不可用 (2认同)