大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
克隆是一种基本的编程模式。事实上,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):
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183657.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...