Параметрический полиморфизм борется - PullRequest
0 голосов
/ 17 ноября 2011

Помимо реализации Bag & List для назначения, следующим шагом является создание упорядоченной версии. Требуется указать параметрический интерфейс OrderedCollection с правильными параметрами типа и ограничениями. Моя проблема с его реализацией.

Интерфейс Collection <E> существует и определяется как

public interface Collection<E> extends Iterable<E>{
  public void add(E e);
  public void remove(E e);
  public boolean contains(Object e);
  public void clear();
  public int size();
  public boolean isEmpty();
  public Object[] toArray();
}

Реализуется классами

public class UnorderedList<E> implements Collection<E>
public class UnorderedBag<E> extends UnorderedList<E> implements Collection<E>

У меня работают структуры, и сейчас я пытаюсь реализовать отсортированную версию. Чтобы сделать это и удовлетворить часть требований, я создал OrderedCollection как

public interface OrderedCollection <E extends Comparable<E>> {
  public int compareTo(E e);
}

, поскольку он расширяет методы, уже определенные в Collection, и единственная необходимая новая функциональность - это метод compareTo().

Однако, когда я пытаюсь реализовать OrderedList объявлением

public class OrderedList<E> extends UnorderedList<E> implements OrderedCollection<E>

Я получаю сообщение о том, что

Bound mismatch: The type E is not a valid substitute for the bounded parameter <E
extends Comparable<E>> of the type OrderedCollection<E>

Поскольку я понимаю сообщение об ошибке, мне нужно указать тип параметра, который является допустимой заменой для параметра, указанного в объявлении интерфейса. Тем не менее, я попробовал

OrderedCollection<E extends Comparable<E>>

как декларатор реализаций, но затем я получаю предупреждение о том, что существует синтаксическая ошибка на extends.

Как мне удовлетворить требования здесь?

1 Ответ

2 голосов
/ 17 ноября 2011

В вашем объявлении класса OrderedList универсальный тип OrderedList должен соответствовать ограничению, которое ожидает OrderedCollection.

public class OrderedList<E extends Comparable<E>> 
             extends UnorderedList<E> 
             implements OrderedCollection<E>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...