sar*_*ter 5 immutability circular-reference kotlin
在 Kotlin 中,假设我有data class A (val f: B)和data class B (val f: A)。我想初始化 localvar a: A等var b: Bisa.f和bis b.f。并且必须保留 vals。这种循环实例化可能吗?aA.fB.f
data class A(val f: B)
data class B(val f: A)
fun foo() {
var a: A
var b: B
// instantiate a and b here with a.f == b and b.f == a ??
}
Run Code Online (Sandbox Code Playgroud)
不完全是你想要的,但应该有效:
interface A {
val f: B
}
interface B {
val f: A
}
data class AImpl(override var f: B) : A
data class BImpl(override var f: A) : B
fun <T> uninitialized(): T = null as T
fun foo() {
var aImpl = AImpl(uninitialized())
var bImpl = BImpl(aImpl)
aImpl.f = bImpl
val a: A = aImpl
val b: B = bImpl
}
Run Code Online (Sandbox Code Playgroud)
如果您不关心数据类属性val,则可以摆脱接口并仅使用实现类。
| 归档时间: |
|
| 查看次数: |
2440 次 |
| 最近记录: |