• 締切済み

VectorにClone()メソッドを追加する方法

Vectorクラスを継承または何かのインタフェースを実装して、Clone()メソッドを追加したMyVecotorを作成したのですがどうしたらいいですか? MyVector mv = new MyVector(); MyVecotr mv2; mv2 = mv.Clone(); //すべての要素をCloneする mv2 = mv.Clone(4,10); //要素4~10までの要素をCloneする 動きとしてはこんな感じです。

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

ああ、ごめんなさい。シャローコピーではなく、ディープコピーをしたいということだったのですね。 結論から言うと、どんなクラスのオブジェクトがVectorに入っていても対応できる汎用の方法は存在しないと思います。そのVectorに入れられるオブジェクトに何らかの制限を加えないといけないでしょう。 たとえば、 ・特定のインターフェースをimplementsしているクラスのオブジェクトだけをVectorに追加できるようにする (ただし、Cloneableはこの目的には使えない) → そのインターフェースで規定しているメソッドを使ってオブジェクトをコピーする ・publicなclone()メソッドを持っているクラスのオブジェクトだけをVectorに追加できるようにする (リフレクションを使えば可能) とか。

osiete_kun
質問者

お礼

>>結論から言うと、どんなクラスのオブジェクトがVectorに入っていても対応できる汎用の方法は存在しない ObjectInputStream/ObjectOutputStreamを使えば可能と判明した。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

>mv2 = mv.Clone(); //すべての要素をCloneする 引数無しのclone()メソッドは標準のVectorクラスにもありますが、それとは異なる仕様のものをご希望ですか? >mv2 = mv.Clone(4,10); //要素4~10までの要素をCloneする 単純には、コピー元からelementAt()で取り出した値をコピー先へaddElement()で足すだけだと思います。何でつまずいていますか?

osiete_kun
質問者

お礼

標準のVecotor.Cloneは参照のクローンじゃないですか? なので元のVectorと返したVectorは同じものを指す。 今は参照先のオブジェクトのコピーもしたいということで、その方法が分かりません。

関連するQ&A