2013-08-02 83 views
3

我知道如何使用Serializable和Streams進行java深層複製,但只要要複製的對象只有原始數據類型即可。在我的情況下,我有一個父類,在原始數據類型中包含一個子類的ArrayList,並且它們也需要被深度複製。鏈式Java深度複製?

有人能請我指出正確的方向嗎?

更新:

我認爲這是工作,但我只是意識到它不是。

這就是我所擁有的。

public class Pack implements Serializable 
     { 
     String ID; 
     String serviceCode; 
     String name; 
     String type; 
     ArrayList<Service> services; 
     public Pack deepClone() 
     { 
     try 
      { 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      ObjectOutputStream oos = new ObjectOutputStream(baos); 
      oos.writeObject(this); 

      ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 
      ObjectInputStream ois = new ObjectInputStream(bais); 
      Pack clone = (Pack) ois.readObject(); 
      clone.setID(null); 
      clone.setType("Replica"); 
      return clone; 
      } 
      catch (IOException e) 
       { 
       return null; 
       } 
      catch (ClassNotFoundException e) 
       { 
        return null; 
       } 
     } 
     } 


public class Service implements Serializable 
    { 
    String ID; 
    String serviceCode; 
    String name; 
    } 

現在克隆一個父類後,得到一個不錯的克隆,但是服務數組爲空。

更新:

對不起我的錯誤,這是缺乏睡眠。它確實在起作用。

+2

通過「基本數據類型」你的意思是原語? – arshajii

+0

恩,是的,謝謝,讓我解決這個問題。 – Jigzat

+0

你的理解是錯誤的,它也適用於深層對象 – Yoni

回答

2

只需要確保數組列表的對象還實現序列化的,即你的子類

+0

你能解釋一下爲什麼你不喜歡它? –

+0

這不是我。也許我的問題是重複的,我也收到了投票關閉線程。對不起,我找不到類似的問題。 – Jigzat

+0

我認爲它正在工作,但現在我幾乎完成了應用程序,我意識到它不是深度複製。我要添加一些代碼以便更清楚。 – Jigzat

4

無論您是否具有原始數據類型,都會進行序列化。唯一的條件是你的子類也需要可序列化。

請參考這裏的快速教程java_serialization

+0

感謝您的鏈接,我將檢查它。 – Jigzat

+0

礦井也沒有明確說明原因... – Tala