我想在java中实现复制构造函数。我正面临类的非原始类型字段的问题。在创建新副本时,它正在共享成员。例在java中复制构造函数而不是克隆
public class Bad implements Cloneable {
private ArrayList<Integer> a;
private Object c;
public static void main(String[] args) {
Bad b1 = new Bad();
b1.a.add(10);
System.out.println(b1.a);
Bad b2 = b1.clone();
b2.a.add(12);
System.out.println(b1.a);
}
Bad() {
a = new ArrayList<>();
c = null;
}
Bad(Bad b) {
a = b.a;
c = b.c;
}
public Bad clone() {
return new Bad(this);
}
}
,其结果是:
[10]
[10, 12]
我不希望这种事情发生。以此为例。我原来的问题包含更多用户定义的字段。
或者是否有任何图书馆为我工作?提前致谢。
尝试'a = new ArrayList <>(b.a);'这应该使用b中的内容创建一个新的arrayList。一个' – Lino