我需要从 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
的三个不同副本?
最佳答案
一种方法是按照评论中的建议在 IntVoucher
中实现复制构造函数。
public class IntVoucher {
public IntVoucher(IntVoucher original) {
this.field1 = new Field1(original.field1);
...
}
private Field1 field1;
...
}
这样就可以了
IntVoucher vch1 = new IntVoucher(list.get(index));
另一种可能性是重写 IntVoucher
中的 clone
方法并让它实现 java.lang.Cloneable
接口(interface)。
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 中浅/深复制的更多信息。如果这还不够,还有很多完整的示例。
关于java - 从 ArrayList<E> 项创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57482014/