まず最初に、次のことに注意する必要があります。
- のコンパイル エラーは
variables= l.clone()
、Vector にキャストすることで解決できます。このようにvariables = (Vector<a>)l.clone()
(ところで、タイプキャストの警告は無視してください)
- 指定されたコード
Collections.copy(variables, l);
は、エラーなしで問題なくコンパイルされます
Java Naming Conventions
いつも使ってみる
コレクションのCollections.copy()
浅いコピーを提供します。次の例を使用して、コレクションのディープ コピーを作成します。
- ここで、コピーされるクラスはインターフェイスを実装し、メソッド
Cloneable
をオーバーライドする必要がありますclone
- 元のコレクションを繰り返し処理し、複製されたオブジェクトをターゲット コレクションに追加します。
- 関数は
createCopy
ディープ コピーされたコレクションを返します
- コンソールの print ステートメントで、コピーされたベクトルと元のベクトルのメモリ位置の違いに注目してください。
TestCopy
クラス_
package com.test;
import java.util.Vector;
public class TestCopy {
private Vector<ClassToCopy> createCopy(Vector<ClassToCopy> classToCopy) {
Vector<ClassToCopy> localVariable = new Vector<ClassToCopy>();
for(ClassToCopy classVar:classToCopy)
try {
localVariable.add((ClassToCopy)classVar.clone());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return localVariable;
}
public static void main(String[] args) {
Vector<ClassToCopy> originalVector = new Vector<ClassToCopy>();
TestCopy testCopy = new TestCopy();
originalVector.add(new ClassToCopy(1));
originalVector.add(new ClassToCopy(2));
originalVector.add(new ClassToCopy(3));
originalVector.add(new ClassToCopy(4));
System.out.println(originalVector);
Vector<ClassToCopy> copiedVector = testCopy.createCopy(originalVector);
System.out.println(copiedVector);
}
}
ClassToCopy
クラス_
package com.test;
public class ClassToCopy implements Cloneable {
private int varA;
/**
* Constructor for ClassToCopy.
* @param varA <tt></tt>
*/
public ClassToCopy() {
this(-1);
}
/**
* Constructor for ClassToCopy.
* @param varA <tt></tt>
*/
public ClassToCopy(int varA) {
super();
this.varA = varA;
}
/**
* Gets the varA.
*
* @return <tt> the varA.</tt>
*/
public int getVarA() {
return varA;
}
/**
* Sets the varA.
*
* @param varA <tt> the varA to set.</tt>
*/
public void setVarA(int varA) {
this.varA = varA;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "ClassToCopy : "+super.toString()+" [varA=" + varA + "]";
}
/* (non-Javadoc)
* @see java.lang.Object#clone()
*/
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}
私が得た出力
[ClassToCopy : com.test.ClassToCopy@19821f [varA=1], ClassToCopy : com.test.ClassToCopy@addbf1 [varA=2], ClassToCopy : com.test.ClassToCopy@42e816 [varA=3], ClassToCopy : com.test.ClassToCopy@9304b1 [varA=4]]
[ClassToCopy : com.test.ClassToCopy@190d11 [varA=1], ClassToCopy : com.test.ClassToCopy@a90653 [varA=2], ClassToCopy : com.test.ClassToCopy@de6ced [varA=3], ClassToCopy : com.test.ClassToCopy@c17164 [varA=4]]