克隆自定义类的副本

时间:2014-05-24 07:29:25

标签: java oop

我有一个具有以下私有变量的Board类:

private int[][] table = new int[BOARD_DIMENSION][BOARD_DIMENSION] 
private List<Character> movesTaken = new ArrayList<Character>();
private List<Integer> future = new ArrayList<Integer>();

我希望能够通过以下方法克隆新的电路板:

public Board copy(Board parent){
    return new Board(parent);
}



public Board(Board parent){
    System.arraycopy(parent.getTable(),0,this.table,0,parent.getTable().length);
    this.future = parent.getFuture();
    this.initialiseTileReps();
    this.initialiseValueReps();
    this.movesTaken = parent.getMovesTaken();
}

但是当我复制Board对象时:     Board U = root.copy(root);(其中root是我要复制的委员会)。

如果我修改U U.move('U');

我希望修改包含所有游戏片段的U表。

但是它也会修改root表。

有人可以帮我克隆我的自定义主板吗?

2 个答案:

答案 0 :(得分:2)

请记住,您在OOP并且数组副本引用不是&#34;克隆&#34;实际的对象。您必须手动复制阵列中的对象。

有点乱,但100%的功能方法用于克隆&#34;对象woulkd将序列化,然后使用例如反序列化。 ObjectOutputStreamObjectIntputStream。这将创建目标对象的深层副本。到目前为止,可以将类的每个组件都序列化。

答案 1 :(得分:1)

使用它:

public Board copy(Board parent){
    return new Board(parent);
}



public Board(Board parent){
    System.arraycopy(parent.getTable(),0,this.table,0,parent.getTable().length);
    this.future = new ArrayList<Character>(parent.getFuture());
    this.initialiseTileReps();
    this.initialiseValueReps();
    this.movesTaken = new ArrayList<Character>(parent.getMovesTaken());
}