Kotlin中带有val的循环引用 [英] Circular references with vals in Kotlin
本文介绍了Kotlin中带有val的循环引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在Kotlin中,说我有data class A (val f: B)
和data class B (val f: A)
.我想初始化本地var a: A
和var b: B
,以使a.f
是b
和b.f
是a
. A.f
和B.f
必须保留为val.这种循环实例化可能吗?
In Kotlin, say I have data class A (val f: B)
and data class B (val f: A)
. I want to initialize local var a: A
and var b: B
such that a.f
is b
and b.f
is a
. A.f
and B.f
must remain vals. Is this circular instantiation possible?
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 ??
}
推荐答案
不完全是您想要的,但是应该可以工作:
Not exactly what you want but should work:
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
}
如果您不关心数据类的属性是val
,则可以摆脱接口并仅使用实现类.
If you do not care about data class properties being val
s, you can get rid of interfaces and use just implementation classes.
这篇关于Kotlin中带有val的循环引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文