Впервые реализуя интерфейс Java, не могу получить успешную компиляцию - PullRequest
1 голос
/ 05 ноября 2011

Мне нужно реализовать структуру данных сумки, используя интерфейс java.util.Collection. Я не прошу помощи по фактической реализации структуры данных. Я просто не могу заставить мою программу компилироваться. Я просто хочу получить пустую реализацию интерфейса (с нефункциональными сигнатурами методов) для компиляции до того, как я начну реализовывать методы.

class Bag<T> implements java.util.Collection<T> 
  {

  public void Collection () {

  }

  public boolean add(E e) {

  }

  public boolean addAll (Collection<? extends E> c) {

  }

  public void clear() {

  }

  public boolean contains(Object o) {

  }

  public boolean containsAll(Collection<?> c) {

  }

  public boolean equals(Object o) {

  }

  public int hashCode() {

  }

  public boolean isEmpty() {

  }

  public Interator<E> interator() {

  }

  public boolean remove(Object o) {

  }

  public boolean removeAll(Collection<?> c) {

  }

  public int size() {

  }

  public Object[] toArray() {

  }

  public <T> T[] toArray(T[] a) {

  }
}

Компилятор не может найти класс E в параметрах таких методов, как add. Должен ли я определить класс для E, или я что-то не понимаю, что такое E на самом деле? Компилятор говорит, что не может найти класс Collection (в параметрах таких методов, как addAll). Импортирую ли я java.util.Collection или я должен знать что-то еще? Компилятор также не имеет представления о class Iterator, как и я.

Я знаю, что все это, вероятно, элементарно, но вчера я ничего не смог найти через Google и т. Д., И лекции моего профессора вообще не следят за проектами. Я потерян на этом. Спасибо за любую помощь!

Редактировать: Кроме того, я не слишком много искал по этому вопросу, но если бы кто-нибудь мог сказать мне что-нибудь полезное о "?", Например, public boolean addAll (Collection<? extends E> c) {}, это было бы очень полезно.

Ответы [ 6 ]

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

Либо используйте T или E в качестве параметра типа, а затем используйте его последовательно во всем определении класса.

В документации Java используется E, поэтому вы можете, например, изменить первую строку на:

class Bag<E> implements java.util.Collection<E> 

Вам также потребуется либо вернуть значения, либо выдать исключение для тех методов, которые не возвращают void.

public int size() {
    throw UnsupportedOperationException();
}
0 голосов
/ 05 ноября 2011

Прежде чем вы сможете реализовать интерфейс в JAVA, вам нужно будет пройти базовое обучение.Может быть прочитано "мышление в Java" или что-то в вашей программе есть несколько проблем

  1. отсутствует импорт класса Collection
  2. в любом из методов нет операторов возврата
  3. заменить E на T
0 голосов
/ 05 ноября 2011

Ваш универсальный параметр называется T, и вы используете E в реализациях ваших методов.Если вы выберете T в качестве типа элемента, обновите сигнатуры метода.

Вероятно, он все равно не скомпилируется без хотя бы фиктивных реализаций, таких как return null; или return false; в не пустых методах.

java.util.Iterator - это интерфейс , который описывает набор методов, позволяющих перебирать элементы в вашей коллекции.Вы бы вернули экземпляр класса, который реализует этот интерфейс и его методы.YourListIterator, вероятно, сохранит ссылку или указатель на то место, где вы находитесь в списке, вернет соответствующий элемент и продвинется по списку.

Обобщения (включая использование ?) обсуждаются в этом учебник .

0 голосов
/ 05 ноября 2011

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

0 голосов
/ 05 ноября 2011

Попробуйте изменить оператор импорта на import java.util.*;

0 голосов
/ 05 ноября 2011

E должно быть T, это общий тип, который вы собираетесь хранить.Ваш конструктор должен быть для вашего класса, а не интерфейса.Кроме того, вам нужно будет добавить по крайней мере заглушенные возвраты в ваши методы, которые имеют возвращаемое значение, например «return false», если возвращение является логическим.

...