3

Serializable と Streams を使用して Java のディープ コピーを行う方法は理解していますが、コピーするオブジェクトにプリミティブ データ型しかない場合に限ります。私の場合、プリミティブ データ型の中に子クラスの ArrayList を含む親クラスがあり、それらもディープ コピーする必要があります。

誰かがそれを行う正しい方向に私を向けることができますか?

アップデート:

私はそれが機能していると思っていましたが、そうではないことに気づきました。

これは私が持っているものです。

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 です。

アップデート:

すみません、寝不足でした。それは確かに機能しています。

4

2 に答える 2

4

プリミティブ データ型の有無に関係なく、シリアル化が行われます。唯一の条件は、子クラスもシリアライズ可能である必要があるということです。

簡単なチュートリアルについては、こちらを参照してください

于 2013-08-02T17:39:57.793 に答える
2

その配列リストのオブジェクトもシリアライズ可能、つまり子クラスを実装していることを確認する必要があります

于 2013-08-02T17:40:22.183 に答える