你仍然需要: equals 和 copy 只会关心 _other 而忽略 other (正如他们会忽略在类体中定义的所有其他属性一样) . other 是 var 只会使情况变得更糟:重新分配它对数据类功能没有影响 .
但你可以走近一点:
data class Node(private var _other: Node? = null) {
var other: Node
get() = _other ?: this
set(value) {
_other = if (value != this) value else null
}
}
2 回答
你仍然需要:
equals
和copy
只会关心_other
而忽略other
(正如他们会忽略在类体中定义的所有其他属性一样) .other
是var
只会使情况变得更糟:重新分配它对数据类功能没有影响 .但你可以走近一点:
剩下的唯一问题是component1()将返回
_other
. 在这种情况下,您有一个属性,所以它应该无关紧要 .编辑:经过多思考后,
似乎有效地成为你想要的 . 你可以在这里看到差异:
使用第一个解决方案打印
false
,使用第二个解决方案打印true
(如果this
是默认参数,则应该如此) .这是不可能的 . 在构造之前,您无法访问
this
. 但这就是默认构造函数参数的工作原理 .