2013-06-13 37 views
2

我的數據模型初始化時如何初始化複雜java對象的所有子非原始字段?

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(); 

回答

3

爲什麼不這樣簡單?

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

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

你必須寫在A類構造函數和明確創建非原始fields.For初始化所有對象,你必須通過唯一的構造去。

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(){ 

    } 
} 
1

用聲明變量的類的實例初始化成員變量。所以

class A{ 
private B other; 
} 

成爲

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