Назначение попросило нас реализовать тип данных Bag, используя ArrayList или LinkedList в качестве внутреннего интерфейса. Я выбрал ArrayList и создал свою собственную реализацию, включая локальные реализации интерфейса Collection. Сейчас я борюсь с основной концепцией того, как адаптировать свойства Bag с помощью класса my List, в частности вставляя List в List.
Способ создания моего Списка соответствует обычному типу Java, за исключением того, что все методы не реализованы, поэтому я написал свой собственный тип интерфейса Collection как
public interface Collection<E>
реализует методы добавления, удаления, размера, очистки, содержит, isEmpty и toArray.
Тип списка объявлен как
public class List<E> implements Collection<E>
с тремя приватными полями:
private int size;
private E[] data;
private int growSize=10;
E[] data
содержит любой необходимый тип элемента, а growSize - это количество новых слотов для увеличения размера списка по мере необходимости. Это прекрасно работает, когда список традиционно используется для отдельных объектов, но я получаю ошибки при попытке вставить тип списка.
Я пытаюсь реализовать этот метод:
public boolean add(Collection<E> c){
if (size < data.length){
data= (E[]) new Object[10];
data[0]= c;
}
}
Когда я пытаюсь это сделать, появляется сообщение о несоответствии типов между Collection и E.
Два вопроса:
- Во-первых, какие правила дженериков Java я здесь нарушаю и почему?
- Во-вторых, что нужно, чтобы это исправить?