Crear una instancia de objetos emparejados inmutables

¿Es posible crear una clase con una referencia inmutable a un objeto asociado, o tiene que ser una var que asigno después de la creación?

p.ej

 class PairdObject (p: PairdObject, id: String) { val partner: PairdObject = p // but I need ref to this object to create p! } 

o de manera similar, ¿cómo podría crear una instancia del siguiente par?

 class Chicken (e: Egg) { val offspring = e } class Egg (c: Chicken) { val mother = c } 

Aquí hay una solución completa al problema Chicken / Egg:

 class Chicken (e: =>Egg) { lazy val offspring = e } class Egg (c: =>Chicken) { lazy val mother = c } lazy val chicken: Chicken = new Chicken(egg) lazy val egg: Egg = new Egg(chicken) 

Tenga en cuenta que debe proporcionar tipos explícitos a las variables de chicken y egg .

Y para PairdObject:

 class PairdObject (p: => PairdObject, val id: String) { lazy val partner: PairdObject = p } lazy val p1: PairdObject = new PairdObject(p2, "P1") lazy val p2: PairdObject = new PairdObject(p1, "P2") 

Si su problema son las referencias circulares, puede usar la solución publicada en esta pregunta SO:

Scala: referencia circular al crear un objeto?

Esto resuelve el problema del huevo / pollo.

    Intereting Posts