我需要从ArrayList创建几个新对象。假设我的清单是:
ArrayList<InvVoucher> list = .....;
int index = 0;
InvVoucher vch1 = list.get(index);
InvVoucher vch2 = list.get(index);
InvVoucher vch3 = list.get(index);
此处vch1
,vch2
和vch3
持有相同的对象引用。我怎样才能使他们全部独立?如何获得InvVoucher
的三个不同副本?
答案 0 :(得分:0)
一种方法是按照注释中的建议在IntVoucher
中实现副本构造函数。
public class IntVoucher {
public IntVoucher(IntVoucher original) {
this.field1 = new Field1(original.field1);
...
}
private Field1 field1;
...
}
那样您就可以做到
IntVoucher vch1 = new IntVoucher(list.get(index));
另一种可能性是覆盖clone
中的IntVoucher
方法并使其实现java.lang.Cloneable
接口。
public class IntVoucher implements Cloneable {
// note: change from protected to public if needed
protected IntVoucher clone() {
IntVoucher clone = new IntVoucher();
clone.field1 = new Field1(this.field1);
...
return clone;
}
private Field1 field1;
...
}
阅读有关Java浅/深复制的更多信息。如果还不够的话,有很多完整的示例。