Java 复制构造函数不工作
Java copy constructor not working
我已经阅读了很多关于复制构造函数的帖子,但我似乎无法让它工作。我调用了复制构造函数,但对象仍然修改了原来的:
public class Board {
private Square[][] board = getEmptyBoard();
public Board() {
}
public Board(Board originalBoard) {
Square[][] matrix = new Square[6][6];
for(int row = 0; row <= 5; row++) {
for(int col = 0; col <= 5; col++) {
matrix[row][col] = originalBoard.getSquare(row, col);
}
}
this.board = matrix;
}
[...]
}
class 模拟一个类型为 Square
的 6×6 板。 Square
是一个对象,可以容纳一个或多个类型为 Piece
的对象。
我怎样才能拿走我的原始板并制作它的精确副本,以便我可以在 Square
中添加和删除 Piece
,而无需触及原始 Board
对象?
您的深拷贝不够深。您已经创建了自己的二维 Square
数组,但该数组引用与 originalBoard
相同的 Square
对象。
您需要复制从 originalBoard
获得的 Square
对象。根据 Square
对象包含的内容,您需要在复制构造函数中复制其属性(例如 Piece
)。
由于您使用的是 Object
s (Square
) 而不是基元,通过关联 matrix[row][col] = originalBoard.getSquare(row, col);
您将获得对象的引用,任何修改都会更改两个引用。
如果您想复制确切的状态并进行修改,那么您应该在您的 Square class 上实现 Cloneable 并在关联到复制数组时调用 clone()
。
我已经阅读了很多关于复制构造函数的帖子,但我似乎无法让它工作。我调用了复制构造函数,但对象仍然修改了原来的:
public class Board {
private Square[][] board = getEmptyBoard();
public Board() {
}
public Board(Board originalBoard) {
Square[][] matrix = new Square[6][6];
for(int row = 0; row <= 5; row++) {
for(int col = 0; col <= 5; col++) {
matrix[row][col] = originalBoard.getSquare(row, col);
}
}
this.board = matrix;
}
[...]
}
class 模拟一个类型为 Square
的 6×6 板。 Square
是一个对象,可以容纳一个或多个类型为 Piece
的对象。
我怎样才能拿走我的原始板并制作它的精确副本,以便我可以在 Square
中添加和删除 Piece
,而无需触及原始 Board
对象?
您的深拷贝不够深。您已经创建了自己的二维 Square
数组,但该数组引用与 originalBoard
相同的 Square
对象。
您需要复制从 originalBoard
获得的 Square
对象。根据 Square
对象包含的内容,您需要在复制构造函数中复制其属性(例如 Piece
)。
由于您使用的是 Object
s (Square
) 而不是基元,通过关联 matrix[row][col] = originalBoard.getSquare(row, col);
您将获得对象的引用,任何修改都会更改两个引用。
如果您想复制确切的状态并进行修改,那么您应该在您的 Square class 上实现 Cloneable 并在关联到复制数组时调用 clone()
。