2

私のデータモデル

Class A
    fieldA1 : primitive dataType  
    fieldA2 : primitive dataType 
    fieldA3 : NON-primitive dataType (Class B)
            fieldB1 : primitive dataType  
            fieldB2 : primitive dataType 
            fieldB3 : NON-primitive dataType (Class C)
                    fieldC1 : primitive dataType  
                    fieldC2 : primitive dataType 
                    fieldC3 : NON-primitive dataType (Class D)
                            fieldD1 : primitive dataType  
                            fieldD2 : primitive dataType 

私の複雑なオブジェクトは ( Class A)

私の問題は、複雑なJavaオブジェクト
を試してみると 、最初のレベルのすべてのサブ非プリミティブフィールドが次のようになることです 。たとえば initialize
null

A a = new A();

a.fieldA3 -> null
a.fieldA3.fieldB3 -> cant access it (parent is null object)
a.fieldA3.fieldB3.fieldC3 -> cant access it (parent is null object)


複雑なJavaオブジェクトを初期化するときに、すべてのサブ非プリミティブフィールドも初期化されるようにする方法/パターンはありますか?

例えば

A a = new A();

a.fieldA3 -> new B(); 
a.fieldA3.fieldB3 -> new C(); 
a.fieldA3.fieldB3.fieldC3 -> new D();
4

4 に答える 4

3

なぜこのような単純なものではないのですか?

public class A {
  B fieldA3;
  public A() {
   fieldA3 = new B();
  }
}

public class B {
  C fieldB3;
  public B() {
   fieldB3 = new C();
  }
}
于 2013-06-13T09:09:06.700 に答える
1

変数を宣言しているときはいつでも、クラスのインスタンスでメンバー変数を初期化します。そう

class A{
private B other;
} 

になる

class A{
private B other = new B(..)
}
于 2013-06-13T09:11:42.057 に答える
1

クラス A にコンストラクターを記述し、非プリミティブ フィールドのすべてのオブジェクトを明示的に作成する必要があります。初期化には、コンストラクターのみを使用する必要があります。

于 2013-06-13T09:07:57.650 に答える
1

instanceコンストラクターのフィールドに適切な型の を割り当てます。

public class A{

   private B fieldA3;

   public A(){
      this.fieldA3 = new B();
   }
}

または、宣言でそれらを割り当てるだけです。B,C,Dコンストラクターでフィールドをインスタンス化するようにします。

public class A{

   private B fieldA3 = new B();

   public A(){

   }
}
于 2013-06-13T09:08:47.657 に答える