初始化时如何初始化复杂java对象的所有子NON-Primitive字段?

时间:2013-06-13 09:03:54

标签: java oop design-patterns

我的数据模型

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对象时 第一级中的所有子NON-Primitive字段将为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对象时 所有子NON-Primitive字段也将初始化?

例如

A a = new A();

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

4 个答案:

答案 0 :(得分:3)

为什么不这么简单?

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

public class B {
  C fieldB3;
  public B() {
   fieldB3 = new C();
  }
}

答案 1 :(得分:1)

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

答案 2 :(得分: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(){

   }
}

答案 3 :(得分:1)

使用声明变量的类的实例初始化成员变量。所以

class A{
private B other;
} 

变为

class A{
private B other = new B(..)
}