【发布时间】:2015-07-24 06:00:22
【问题描述】:
我在读这个answer,他提到了link,作者解释了为什么我们不应该使用Cloneable。但是,仍然怀疑那里所说的内容
如果我有一个 Cloneable 数组,你会认为我可以跑下来 该数组并克隆每个元素以制作数组的深层副本, 但我不能。 您不能将某些内容投射到 Cloneable 并调用克隆 方法,因为 Cloneable 没有公共克隆方法,并且 对象也没有。如果您尝试转换为 Cloneable 并调用 clone 方法,编译器会说你正在尝试调用 对象上的受保护克隆方法。
但是,我做到了
Init s = Init.getInstance(); // getting instance
int count=0;
Cloneable[] v = new Cloneable[5]; // creating array
Init x = s;
Init y = new Init(s);
try {
while (count < 5) {
v[count++] = (Cloneable) s.clone(); // casting it.
}
s.setClassName("Example");
System.out.println(((Init) v[2]).getClassName()); // Displaying.
} catch (CloneNotSupportedException ex) {
ex.printStackTrace();
}
我能够创建 Cloneable 数组并且我做了作者所说的会导致错误或者我误解了作者的陈述?任何人,请帮助我了解选择 Copy Constructor 而不是 Cloneable 的原因。
【问题讨论】:
-
我是 .net 开发人员,但 oops 概念在 Java 和 C# 中是相似的。根据我的理解,在 Copy Constructor 中,真实对象或复制对象的内存引用都是相同的。因此,当您更改真实对象,您会看到它也会影响复制的对象。在可克隆对象上,它们都有不同的内存引用,它们并不依赖于它们不会相互影响。
标签: java object copy-constructor cloneable