我有以下代码:
abstract class SuperClass (cs: Seq[C]) {
def init {}
}
object A extends SuperClass(Seq(B, C))
object B extends SuperClass(Seq(A, D))
object C extends SuperClass(Seq(A, B))
object D extends SuperClass(Seq(C, B, A))
object E extends SuperClass(Seq(B, A, B))
object Initializer {
def init {
A.init
B.init
C.init
D.init
E.init
}
}
所以一开始,因为每个对象都有更多的东西要初始化,所以我打电话
Initializer.init
然后在程序中的某个时刻,当我使用cs
对象的参数时,我得到 aNullPointerException
因为其中引用的对象之一Seq
确实是null
(打印到控制台显示)。即对对象的引用init
比引用它们的其他对象的调用晚init
,往往被设置为null
。
这是一个有趣的情况。我在这里有一个所谓的任意交叉引用,我不知道如何正确实现初始化而不将其完全引入外部方法(无论如何这都是封装的分解)。尤其是用户可能被赋予创建他们自己的单例扩展SuperClass
类的能力。
用尽可能少的样板来做到这一点的最佳方法是什么?