在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。这个循环示例化可能吗?
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 ??
}
4条答案
按热度按时间gab6jxml1#
不完全是你想要的,但应该工作:
如果您不关心数据类属性
val
s、 您可以去掉接口,只使用实现类。kq0g1dla2#
dmitry jemerov在kotlinlang slack集团的回答:
唯一的可能就是使用反射。将一个伪b示例传递给a的构造函数,然后创建一个传递a示例作为参数的真实b示例,然后使用反射将a示例中“f”字段的值更改为b示例。
但我强烈建议您不要这样做,而是重新考虑您的数据模型。
sbdsn5lh3#
传递一个还没有被构造成论点的对象似乎是不可能的。所以,我认为这样的交叉引用初始化对于原始数据类是不可能的。
不过,还是可以解决一些问题:
syqv5f0l4#
如果显式声明自引用,就可以这样做
val
作为Lazy
:这个指纹