1

ディープコピーメソッドを作りたいです。先日、この問題についてここで助けを求めましたが、それはコピー コンストラクターに関するものでした。今、私は定期的な方法が必要です。コードを作成しましたが (動作していません)、完全には理解していません。

public GhostList deepCopy(){
        int length=this.getLength();
        GhostList jadeed=new GhostList();
        Ghost[] data = new Ghost[length];
        for (int i=0;i<this.getLength();i++){
            data[i] = new Ghost();
            data[i].setX(this.ghosts[i].getX());
            data[i].setY(this.ghosts[i].getY());
            data[i].setColor(this.ghosts[i].getColor());
            data[i].setDirection(this.ghosts[i].getDirection());
        }

        return jadeed;
    }

jadeed という名前の新しい GhostList を作成し、その下にゴーストの新しいデータ配列を作成すると、データが jadeed GhostList に属していることがわかりますか? 2つを関連付ける方法はわかりませんが、関連付ける必要があります。

また、コピーと this.object の長さが一致しません。私の問題は何ですか?

4

4 に答える 4

3

GhostList新しいアレイと新しいアレイを作成しましたGhost。配列に入力して返しますが、返さ
れたはGhost配列とは何の関係もありません。 すべての新しいゴーストをGhostListGhostListGhost
GhostList

于 2010-10-16T22:16:10.547 に答える
2

最初に、コピー コンストラクターについて言及しました。すでに機能している場合は、deepCopyメソッドで行う必要があるのは次のとおりです。

return new GhostList(this);

今はそれを忘れて、投稿したコードに戻りましょう。という名前の配列を作成してdataいますが、どこでも使用したことはありません。この配列を に割り当てることになっていませんjadeedか? 何かのようなもの:

jadeed.ghosts = data;

最後に、 method を呼び出す代わりに、それを呼び出してインターフェイスを実装するdeepCopy方がよいでしょう。これを行うと、標準インターフェースを使用してオブジェクトのコピーを取得する方法を誰もが知ることができます。cloneCloneable

于 2010-10-16T22:19:48.403 に答える
1

クラスGhostListは、そのデータ メンバとして の配列への参照を持ちますGhost。クラス定義を示していないので、 member の名前が であるとしましょうfoo。あとfooは、新しく作成されたjadeedオブジェクトの参照を、作成して入力した配列を参照するようにするGhostだけです。次のように実行できます。

jadeed.foo = data;

戻る前にjadeed

于 2010-10-16T22:24:35.880 に答える
0

GhostList構成されているすべてが である場合、インスタンスをバイト配列にSerializableシリアル化し、再度読み取ることができます。` Jakarta Commons Lang - 1行のコードGhostListを使用しない限り、これは数行のコードです:

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/SerializationUtils.html#clone%28java.io.Serializable%29

于 2010-10-16T23:52:15.307 に答える