Итак, я сейчас работаю над проектом, воссоздающим методы для списков строковых массивов и списков связанных строк. Существует интерфейс StringList, который реализуют как ArrayStringList, так и LinkedStringList. Нам не разрешено видеть исходный код интерфейса - только документация по API. Для каждого класса мы должны создать конструктор по умолчанию и конструктор копирования для обоих классов. Я выполнил тесты, и конструкторы по умолчанию оба прошли, но конструктор копирования ArrayStringList не работает и выдает сообщение об ошибке «null» или «-1». Я довольно плохо знаком с наследованием и интерфейсами, и я думаю, что параметры объекта и типы данных массива строк меня немного сбивают с толку.
Вот код, который у меня есть, и методы, используемые в конструкторе:
Конструктор My Copy:
private String[] stringArray;
private int size;
public ArrayStringList(StringList sl) {
size = sl.size();
ArrayStringList asl = new ArrayStringList();
for(int i = 0; i < size-1; i++) {
if(sl.get(i) != null) {
asl.set(i,sl.get(i).toString());
} //if
} // for
} // copy constructor
Размер:
public int size() {
return stringArray.length;
} // size
Метод получения:
public String get(int index) {
if(index < 0 || index >= size) {
throw new IndexOutOfBoundsException("out of bounds");
} else {
return stringArray[index];
}
} //get
Метод задания:
public String set(int index, String s) {
String old = stringArray[index];
stringArray[index] = s;
return old;
} // set
В проекте описание конструктора копирования было следующим:
Реализующий класс должен явно определять конструктор копирования. Конструктор копирования должен принимать ровно один параметр типа интерфейса StringList. Это должно сделать вновь созданный объект списка глубокой копией списка, на который ссылается параметр конструктора. Следовательно, начальный размер и строковые элементы нового объекта списка будут такими же, как и у другого списка. Для ясности, другой список может быть объектом любой реализации интерфейса StringList. Никаких других предположений о типе объекта делать не следует.