0

foo という名前の値を持つクラス (class0) があります。

foo を bar にコピーしたい。

私はこれを試しました:

bar = class1.foo;

しかし、bar を変更すると foo が変更されます...

私は何をすべきか?

注 1:すべての値の型は ですArrayList<ArrayList<class2>>
注2:私も試しました

public ArrayList<ArrayList<class2>> getFoo(){
return new ArrayList<ArrayList<class2>>(foo);
}
4

3 に答える 3

2

もしも

new ArrayList<ArrayList<class2>>(foo)

目的の効果が得られない場合は、ディープ コピーが必要であると想定します。

これを行う最も簡単な方法は、シリアル化してから逆シリアル化することです-これは、複雑さに関係なく、すべてのシリアル化可能なオブジェクトで機能します(....オブジェクトのコレクションのコレクションのコレクション):

    ArrayList<ArrayList<class2>> obj = null;
    try {
         FastByteArrayOutputStream fbos = 
                new FastByteArrayOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(fbos);
        out.writeObject(foo);
        out.flush();
        out.close();
        ObjectInputStream in = 
            new ObjectInputStream(fbos.getInputStream());
        obj = (ArrayList<ArrayList<class2>>) in.readObject();
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    catch(ClassNotFoundException cnfe) {
        cnfe.printStackTrace();
    }
    return obj;    

ただし、class2 を Serializable として宣言する必要があります。これがオプションでない場合は、foo のすべての配列リストを反復処理し、それらをコピーする特定のメソッドを宣言する必要があります。

new ArrayList<ArrayList<class2>>(foo.get(i));

そして、それらを結果の ArrayList に入れます。

于 2013-09-05T13:43:20.000 に答える