从ArrayList <E>项目创建新对象

时间:2019-08-13 16:38:12

标签: java arraylist

我需要从ArrayList创建几个新对象。假设我的清单是:

ArrayList<InvVoucher> list = .....;
int index = 0;
InvVoucher vch1 = list.get(index);
InvVoucher vch2 = list.get(index);
InvVoucher vch3 = list.get(index);

此处vch1vch2vch3持有相同的对象引用。我怎样才能使他们全部独立?如何获得InvVoucher的三个不同副本?

1 个答案:

答案 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浅/深复制的更多信息。如果还不够的话,有很多完整的示例。