Copy конструктор должен нормально скопировать переменные экземпляра и при необходимости некоторые глубинное государство - не сохранить ссылку на исходный объект.
Ваши методы получения & должны иметь возможность управлять собственным состоянием объекта, в его собственных переменных. Имея какую-то структуру двойного пути во всем мире, с if
утверждениями, которые будут , либо ваши собственные переменные или оригинальный экземпляр, из которого он был скопирован, плохой дизайн и очень сложный/неэффективный.
public class Board {
protected int size;
protected Cell[][] grid;
public Board (int N) {
this.size = N;
// for example, create a 2D array.
this.grid = new Cell[size][size];
}
public Board (Board orig) {
this.size = orig.size();
// deep-copy the grid.
this.grid = new Cell[size][];
for (int i = 0; i < size; i++) {
grid[i] = Arrays.copyOf(orig.grid[i], size);
}
}
public int size() {return size;}
}
я сильно предпочитаю protected
над частным, для большей универсальности & технического доступа.
Я также не использую префиксы полей, но вместо этого устраняю назначения полей (в сеттерах или других методах) с this.
. Этот подход очень хорошо подходит для простых полей.
Для коллекций я суффикс имен полей со списком или картой или что-то еще; параметры называются без суффикса. Это делает множественные операции & метод-вызовы с множественными значениями четкими. Например, add (List<Customer> customers)
добавит их в поле customerList
.
Этот код не компилируется. Отправьте фактический код – Reimeus
Второй конструктор, который принимает экземпляр типа 'Board', никогда не устанавливает значение' _size' (кстати, у него нет типа). – David
Я не вижу, как это могло бы генерировать 'NullPointerException', оно должно просто напечатать' 0' ... – MadProgrammer