Я пытаюсь сделать копию объекта, чтобы выполнить некоторые тесты, не затрагивая оригинальный объект. Я сделал эту функцию copy(), но исходный объект все еще затронут.копия объекта (JAVA)
Внутри класса "I" У меня есть эта функция копирования:
@Override
public Piece copy() {
I newPiece = new I(blocks[0], blocks[1], blocks[2], blocks[3]);
newPiece.STATUS = this.STATUS;
newPiece.FORM = this.FORM;
return newPiece;
}
, и я пытаюсь сделать копию, как это:
Piece rotated = piece.copy();
rotated.changeForm();
класса "I" является подклассом абстрактного класса с абстрактным методом copy(). когда я делаю changeForm() в скопированном объекте, он также влияет на исходный.
решаемых
объектов Block были переданы в качестве ссылки тоже так мне нужно добавить метод копирования() даже для блочного типа. Код изменился следующим образом:
@Override
public Piece copy() {
I newPiece=new I(blocks[0].copy(),blocks[1].copy(),blocks[2].copy(),blocks[3].copy());
newPiece.STATUS=this.STATUS;
newPiece.FORM=this.FORM;
return newPiece;
}
Что тип 'blocks'? – Eran
Я содержание блоков являются ссылочными типами, их также нужно скопировать. – jHilscher
если вы сделаете копию, установив объекты из оригинала в качестве свойств из копии, внесение изменений в те же свойства повлияет на свойства из оригинала и копии – Tom