- 締切済み
VectorにClone()メソッドを追加する方法
Vectorクラスを継承または何かのインタフェースを実装して、Clone()メソッドを追加したMyVecotorを作成したのですがどうしたらいいですか? MyVector mv = new MyVector(); MyVecotr mv2; mv2 = mv.Clone(); //すべての要素をCloneする mv2 = mv.Clone(4,10); //要素4~10までの要素をCloneする 動きとしてはこんな感じです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
ああ、ごめんなさい。シャローコピーではなく、ディープコピーをしたいということだったのですね。 結論から言うと、どんなクラスのオブジェクトがVectorに入っていても対応できる汎用の方法は存在しないと思います。そのVectorに入れられるオブジェクトに何らかの制限を加えないといけないでしょう。 たとえば、 ・特定のインターフェースをimplementsしているクラスのオブジェクトだけをVectorに追加できるようにする (ただし、Cloneableはこの目的には使えない) → そのインターフェースで規定しているメソッドを使ってオブジェクトをコピーする ・publicなclone()メソッドを持っているクラスのオブジェクトだけをVectorに追加できるようにする (リフレクションを使えば可能) とか。
- salsberry
- ベストアンサー率69% (495/711)
>mv2 = mv.Clone(); //すべての要素をCloneする 引数無しのclone()メソッドは標準のVectorクラスにもありますが、それとは異なる仕様のものをご希望ですか? >mv2 = mv.Clone(4,10); //要素4~10までの要素をCloneする 単純には、コピー元からelementAt()で取り出した値をコピー先へaddElement()で足すだけだと思います。何でつまずいていますか?
お礼
標準のVecotor.Cloneは参照のクローンじゃないですか? なので元のVectorと返したVectorは同じものを指す。 今は参照先のオブジェクトのコピーもしたいということで、その方法が分かりません。
お礼
>>結論から言うと、どんなクラスのオブジェクトがVectorに入っていても対応できる汎用の方法は存在しない ObjectInputStream/ObjectOutputStreamを使えば可能と判明した。