2013-08-02 3 views
3

필자는 Serializable 및 Streams를 사용하여 Java 딥 카피를 수행하는 방법을 이해하지만 복사 할 객체가 원시 데이터 유형만을 가지고있는 한 이해합니다. 필자의 경우에는 기본 데이터 유형 중 하나 인 하위 클래스의 ArrayList를 포함하는 상위 클래스가 있고 그 하위 클래스도 완전히 복사해야합니다.체인 된 Java 딥 복사?

누군가 올바른 방향으로 나를 가리킬 수 있습니까?

UPDATE :

내가 그것을 작동 있다고 생각하지만 난 그냥하지 않습니다 알고 있습니다.

이것은 내가 가지고있는 것입니다.

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; 
    } 

이제 부모 클래스를 복제 한 후 좋은 복제본을 얻지 만 서비스 배열은 null입니다.

UPDATE : 내 실수

죄송합니다, 그것은 수면의 부족이었다. 실제로 작동합니다.

+2

당신이 프리미티브을 의미합니까? – arshajii

+0

네, 고맙습니다. 고칠 수있게 해주세요. – Jigzat

+0

당신의 이해가 틀리면, 깊은 물체에서도 작동합니다. – Yoni

답변

2

java_serialization 그냥 확인해야 빠른 자습서 여기를 참조하십시오, 즉 아이 클래스 "기본 데이터 유형"으로

+0

왜 당신이 그것을 downvote 않았다 설명 할 수 있습니까? –

+0

그건 내가 아니야. 어쩌면 내 질문이 중복되어 스레드를 닫는 투표를 받았습니다. 죄송합니다. 비슷한 질문을 찾을 수 없습니다. – Jigzat

+0

나는 그것이 작동하고 있다고 생각했지만, 이제는 앱을 거의 마쳤을 때 깊은 복사가 아니라는 것을 깨달았다. 좀 더 명확하게 코드를 추가하겠습니다. – Jigzat

4

원시 데이터 형식을 사용하는지 여부에 관계없이 직렬화가 수행됩니다. 유일한 조건은 자식 클래스가 직렬화되어야한다는 것입니다.

해당 배열 목록의 객체가 직렬화를 구현

+0

링크를 제공해 주셔서 감사합니다. – Jigzat

+0

내 이유도 명시되지 않고 downvoted되었습니다 ... – Tala