克隆是一种基本的编程模式。事实上,Java在很多方面可能实现得很差,但这丝毫没有减少克隆的必要性。而且,很容易实现克隆,无论你希望它如何工作,浅层的,深层的,混合的,无论什么。如果愿意的话,甚至可以为函数使用clone名称,而不实现Cloneable。
假设我有类A、B和C,其中B和C是从A派生的。如果我有一个A类型的对象列表,如下所示:
ArrayList list1;
ArrayList list2 = new ArrayList();
for(A a : list1) {
list2.add(new A(a));
}
如果对象实际上是B或C类型的,则不会得到正确的副本。如果A是抽象的呢?现在,有人提出:
ArrayList list2 = new ArrayList();
for(A a : list1) {
if(a instanceof A) {
list2.add(new A(a));
} else if(a instanceof B) {
list2.add(new B(a));
} else if(a instanceof C) {
list2.add(new C(a));
}
}
你想做的是:
ArrayList list2 = new ArrayList();
for(A a : list1) {
list2.add(a.clone());
}
很多人都指出了克隆的基本Java实现存在问题的原因。但是,这样很容易克服:
public A clone() {
return new A(this);
}
B类:
@Override
public B clone() {
return new B(this);
}
C类:
@Override
public C clone() {
return new C(this):
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183657.html原文链接:https://javaforall.cn