Копирование объекта с использованием конструктора Java - PullRequest
0 голосов
/ 16 октября 2010

Допустим, я хочу сделать глубокую копию объекта, но используя его конструктор. Итак, у меня есть:

public class PositionList {
    private Position[] data = new Position[0];
    private int size = 0;

public PositionList(PositionList other, boolean deepCopy) {
    if (deepCopy==true){
        size=other.getSize();
        for (int i=0;i<data.length;i++)
        data[i]=other.data[i];
    }
    else {
        data=other.data;
        size = other.size;

И, так сказать, у меня это называется:

PositionList list = new PositionList();
PositionList acopy = new PositionList(list, true);

Однако то, что я делаю, неверно, и я не уверен, почему ..

1 Ответ

1 голос
/ 16 октября 2010

Проблема заключается в логике глубокой копии:

size=other.getSize();
for (int i=0;i<data.length;i++)
    data[i]=other.data[i];

Вы устанавливаете поле size (которое избыточно для массива data), но не назначаете новый массив для data поле, которое, по-видимому, и есть смысл вашей "глубокой" копии.Вы должны инициализировать data другим size (или other.data.length):

data = new Position[other.data.length];
for (int i=0;i<data.length;i++)
    data[i]=other.data[i];

(и избавиться от size все вместе)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...