gpt4 book ai didi

Kotlin:相互分配

转载 作者:行者123 更新时间:2023-12-04 20:29:03 25 4
gpt4 key购买 nike

我想设置两个相互保持不可变引用的值。例子:

data class Person(val other: Person)
val jack = Person(jill), jill = Person(jack) // doesn't compile

注: lateinit似乎不适用于数据类主要构造函数。

有任何想法吗?

最佳答案

你可以逃脱这样的事情:

class Person() {
private var _other: Person? = null

private constructor(_other: Person? = null) : this() {
this._other = _other
}

val other: Person
get() {
if (_other == null) {
_other = Person(this)
}
return _other ?: throw AssertionError("Set to null by another thread")
}
}

然后你就可以做到:
val jack = Person()
val jill = jack.other

使用 data class这里不适用于 多重原因 :
  • 首先是因为data class不能有一个空的构造函数。
  • 即使这不是问题,生成的方法最终也会有 循环依赖 并将在运行时失败 java.lang.StackOverflowError .所以你必须覆盖 toString , equals等哪一种挫败目的使用 data class首先。
  • 关于Kotlin:相互分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50799240/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com