我從下面的一個項目中獲取了一些示例代碼。其中,我需要將Vector v的元素深入克隆到Vector w中。換句話說,每個單獨的元素都需要在內存中引用自己的位置。Java - 深度克隆具有多種類型元素的矢量
在我的程序中,我需要製作不同類型的對象並將它們添加到Vector中。然後我需要克隆該向量中的每個元素(意思是將它們放在內存中),並將這些克隆的元素添加到新的Vector中。問題是我不知道如何克隆當程序員不知道對象類型時。如果每個元素都是相同的類型,我可以轉換爲該類型。但這不是這種情況。
在我的代碼中,我確定給定的元素實現了Cloneable,但我不知道如何執行實際的克隆。 (以某種方式鑄造適當的類型,然後調用克隆()或其他方式)。
謝謝。我的代碼如下,非常感謝任何幫助。
import java.util.*;
public class Test {
public static void main(String[] arguments) {
// Establish variables
Point p1 = new Point();
Point p2 = new Point(1, 2);
A a1 = new A();
A a2 = new A(1);
// Create vector v and add variables to vector
Vector v = new Vector();
v.add(p1);
v.add(p2);
v.add(a1);
v.add(a2);
// Change p1.x
p1.x = 1;
// Create vector w and assign elements from v into vector
Vector w = new Vector();
int n = v.size();
for (int i = 0; i < n; i++)
if (v.get(i) instanceof Cloneable)
w.add(v.get(i));
// print elements in vectors
System.out.println(v);
System.out.println(w); //elements seem to reference the same area in memory
}
}
class Point implements Cloneable {
int x;
int y;
Point() {
x = 0;
y = 0;
}
Point(int x, int y) {
this.x = x;
this.y = y;
}
public Object Clone() {
try {return super.clone();}
catch (CloneNotSupportedException exception) {return null;}
}
public String toString() {return "Point[x=" + x + ",y=" + y + "]";}
}
class A implements Cloneable {
int i;
A() {i = 0;}
A(int i) {this.i = i;}
public Object Clone() {
try {return super.clone();}
catch (CloneNotSupportedException exception) {return null;}
}
public String toString() {return "A[i=" + i + "]";}
}
但爲什麼哦爲什麼你使用'Vector'? – dimo414
我會在這裏非常非常小心。在Java中,可執行文件通常是程序員錯誤*最容易的事情之一。你正在做出一個巨大的假設,即每個實現可複製類的類將會做你正在尋找的確切類型的深層副本。 – avgvstvs