2017-06-04 25 views
0

だから私はので、私はちょうどここに例をあげる言葉にこれをするかどうかはわかりません。パラメータパラドックス? (どのように言葉にわからない)

public class test { 
    private Object1 o1; 
    private Object2 o2; 
    private Object3 o3; 

    public test() { 
     o1 = new Object1(o2, o3); 
     o2 = new Object2(o1); 
     o3 = new Object3(o1); 
    } 
} 

をだから私の問題は、私はこれらの3つのオブジェクトこれらのパラメータを与える必要があるということです私はo1のo2とo3を置くとnullになるので問題が発生します。 o1の上にo2とo3をインスタンス化しようとすると、o1はnullになり、問題は再び発生します。誰かが私にこれに対する解決策を見つけるのを助けることができますか?私はこれらの3つのオブジェクトを別々にしておきたいと思います(つまり、o2またはo3にo1フィールドを与えないでください)。

+0

のように見えますか? –

+0

これは相互作用する3つのJPanelを追加する必要があるJFrame用です。 – L1ghtShadow

+1

'JPanel'を最初に作成し、その後に属性を配置します。さもなければ、真円性を避けることはできません。さらに、コンストラクタ名( 'o1'など)はクラス名(Object1'など)と一致しなければなりません。また、Javaの命名規則に従う必要があります。 –

答えて

1

あなたはすべての費用を避ける必要があるcircular dependency に直面しています。

すぐに必要なのは、依存オブジェクトを取得せず、設定メソッドを定義し、空のコンストラクタを使用してオブジェクトを作成し、それらのセットメソッドにオブジェクトを渡すことによってそれらを結ぶことではありません。

public class test { 
     private Object1 o1; 
     private Object2 o2; 
     private Object3 o3; 

     public test() { 
      o1 = new Object1(); 
      o2 = new Object2(); 
      o3 = new Object3(); 

      o1.setO2(o2); 
      o1.setO3(o3); 

      o2.setO1(o1); 
      o3.setO1(o1); 

     } 
    } 
+0

ああ、これは良い解決策です、これはありがとうございます。 – L1ghtShadow

0

この問題の単純な解決策は、コンストラクタの代わりにメソッドを使用して開始することです。
メソッドを定義すると、init &は、デフォルトのコンストラクタまたは引数なしのコンストラクタを使用します。今すぐすべてのオブジェクト&を作成し、すべてのオブジェクトのメソッドinitを適切な順序で呼び出します。

ここでもう1つのことができます。見てみましょう...
2つの引数コンストラクタから1つの引数コンストラクタ&を呼び出す代わりに、2つの引数& defineメソッドを使用してコンストラクタを定義できます。
まずメソッドをObject2 & Object3に定義します。 Object1のコンストラクタ..

Object1(Object2 o2, Object3 o3){ 
    //Some code 
    o2.init(this); 
    o3.init(this); 
    //Some code 
} 

は、今のオブジェクトを作成するために、あなたのコードを使用すると、初期化のようなものを必要とする問題の種類について...

public class test { 
    private Object1 o1; 
    private Object2 o2; 
    private Object3 o3; 
    public test() { 
     o2 = new Object2(); 
     o3 = new Object3(); 
     o1 = new Object1(o2, o3); 
    } 
} 
関連する問題