我有不可变的类 Outer 和 Inner 如下:
class Outer(val intra: Outer#Inner) {
class Inner(val q: Int)
}
我想创建一个相互引用的 Outer 和 Inner 实例,如下所示:
val outer = new Outer(inner)
val inner = new outer.Inner(5)
但是,当然,此代码不会编译,因为值“inner”在第一行中被引用,然后在第二行中定义。
如果我在这两行的“val”关键字之前添加了“lazy”关键字,它会编译,但会在运行时产生堆栈溢出异常。
我知道如果我让类 Outer 像这样可变,我可以解决这个问题:
class Outer(var intra: Outer#Inner) {
class Inner(val q: Int)
}
val outer = new Outer()
val inner = new outer.Inner(5)
outer.intra = inner
但我想保持类不可变。我怎么解决这个问题?