2016-05-02 6 views
0

Ich habe zwei Klassen:java beiden letzten Fällen mit Bezug zueinander

public class Group { 
    private final MyObject object; 

    public Group(MyObject object) { 
    this.object = object; 
    } 
} 


public class MyObject { 
    public Group group; 

    public MyObject() { 

    } 
} 

Derzeit Gruppe eine endgültige Instanz von MyObject hat.

Und ich initiieren sie zur Zeit wie folgt aus:

MyObject object = new MyObject(); 
Group group = new Group(object); 

object.group = group; 

Doch das ist nicht das, was ich will, da die „Gruppe“ Variable in „MyObject“ muss auch endgültig sein (zur Klarheit des Code und einfacher Debuggen).

Gibt es eine Möglichkeit, dass ich das irgendwie tun kann?

MyObject object = new MyObject(group); 
Group group = new Group(object); 

Wo das modifizierte Konstruktor „MyObject“ als solche wäre:

public class MyObject { 
    private final Group group; 

    public MyObject (Group group) { 
    this.group = group; 
    } 
} 

Vielen Dank im Voraus

+0

Ich glaube, Sie einfache Klasse Design gebrochen ist. Sie sollten zirkuläre Abhängigkeiten in allen Abstraktionsebenen (Klassen, Pakete ...) vermeiden. Wenn Sie aus dem Objekt auf die Gruppe verweisen müssen, sollten Sie einen Dienst implementieren, der Ihnen die Gruppe für ein bestimmtes Objekt zurückgibt. – meistermeier

Antwort

1

Der einzige Weg, dies zu tun ist in einer der Konstrukteure. In der Regel wollen Sie this von einem Konstruktor vermeiden vorbei, aber in diesem Fall gibt es keine Alternative (mit Ausnahme eines nicht-Endfeld)

public class Group { 
    private final MyObject card; 

    public Group(MyObject card) { 
     this.card = card; 
    } 
} 


public class MyObject { 
    private final Group group; 

    public MyObject() { 
    // initialise MyObject 

    // do this only after initialising MyObject 
    group = new Group(this); 
    } 
} 

// to create both at once. 
MyObject obj = new MyObject(); // will have a Group inside. 
Verwandte Themen