2016-05-02 3 views
0

を参照して、2つの最終インスタンス私は2つのクラスがあります。Javaの相互

そして、私は現在、このようにそれらを開始:

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

object.group = group; 

「MyObjectに」の「グループ」変数は、コードと簡単にデバッグを明確にするために(あまりにも最終的にする必要があるので、しかし、これは、私が欲しいものではありません)。

私は何とかこれを行う方法がありますか?あなたがこれを行うことができる唯一の方法は、コンストラクタの一つである事前

+0

はありません。すべての抽象レベル(クラス、パッケージ...)で循環依存を避けるべきです。オブジェクトからグループを参照する必要がある場合は、特定のオブジェクトのグループを返すサービスを実装する必要があります。 – meistermeier

答えて

1

public class MyObject { 
    private final Group group; 

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

ありがとう:「MyObjectに」の変更コンストラクタは以下のようなことでしょう

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

。私はあなたの単純なクラスのデザインが壊れていると思う一般的に、あなたは、コンストラクタからthisを渡す避けたいが、この例では(非最後のフィールドを除く)は、代替

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. 
関連する問題