Переопределить метод clone
в B
:
public class B {
private int f1;
private String f2;
@Override
public B clone() {
B clone = new B();
clone.f1 = this.f1;
clone.f2 = this.f2;
return clone;
}
}
и использовать его для создания дубликата:
B b1 = new B();
//...
B b2 = b1.clone();
Обновление:
public B clone() {
B N = new B();
try {
N = (B)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
N.setBoard(this.getBoard());
return N;
}
Попробуйте выполнить следующее (при условии, что B
реализует Cloneable
):
@Override
public B clone() throws CloneNotSupportedException {
return (B) super.clone();
}
Обновление:
Настраиваемая реализация для board
:
class B implements Cloneable {
private char[][] board;
@Override
public B clone() throws CloneNotSupportedException {
B clone = (B) super.clone();
clone.board = new char[this.board.length][];
for(int i=0; i<this.board.length; i++) {
clone.board[i] = new char[this.board[i].length];
System.arraycopy(this.board[i], 0, clone.board[i], 0, this.board[i].length);
}
return clone;
}
public char[][] getBoard() {
return board;
}
public void setBoard(char[][] board) {
this.board = board;
}
@Override
public String toString() {
return Arrays.deepToString(this.board);
}
}