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)

我的问题是,
当我尝试使用initialize复杂的 java 对象
时,第一级中的所有子非原始字段将是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

您必须在 A 类中编写一个构造函数,并为非原始字段显式创建所有对象。对于初始化,您只能通过构造函数进行。

于 2013-06-13T09:07:57.650 回答
1

instance适当类型的 an 分配给构造函数中的字段。

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 回答
1

无论您在何处声明变量,都使用类的实例初始化成员变量。所以

class A{
private B other;
} 

变成

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