我有一个具有以下私有变量的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表。
有人可以帮我克隆我的自定义主板吗?
答案 0 :(得分:2)
请记住,您在OOP
并且数组副本引用不是&#34;克隆&#34;实际的对象。您必须手动复制阵列中的对象。
有点乱,但100%的功能方法用于克隆&#34;对象woulkd将序列化,然后使用例如反序列化。 ObjectOutputStream
和ObjectIntputStream
。这将创建目标对象的深层副本。到目前为止,可以将类的每个组件都序列化。
答案 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());
}