I have the following code:
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
}
}
so at the beginning, because each object has inside some more things to initialize, I call
Initializer.init
and then at some point further in the program, when I use the cs
parameter of an object, I get a NullPointerException
because one of the objects referenced in the Seq
is really null
(printing out to the console shows that). Namely the references to the objects which have their init
called later than the init
of other objects that reference them, tend to be set to null
.
This is an interesting situation. I have a supposedly any-to-any arbitrary cross-referencing here and I do not know how to properly realize the initialization without bringing it out to an external method completely (which is a break-down of encapsulation anyway). Especially that users might be given the ability to create their own singletons extending the SuperClass
class.
Which is the best way to do this with as less boilerplate as possible?