Почему этот универсальный интерфейсный стек не работает? - PullRequest
0 голосов
/ 24 ноября 2008

У меня есть набор универсальных интерфейсов и классов

public interface IElement {
// omited
}

class Element implements IElement {
// omited
}

public interface IElementList<E extends IElement>  extends Iterable {
   public Iterator<E> iterator();
}

class ElementList implements IElementList<Element> {

    public Iterator<Element> iterator() {
       // omited
       }
}


public interface IElementListGroup<E extends IElementList<? extends IElement>> {
    public E getChosenElementList();
}


class ElementListGroup implements IElementListGroup<ElementList> {
    public ElementList getChosenElementList() {
        // omited
    }
}

А потом простой код

ElementListGroup group;

for(Element e : group.getChosenElementList())
{
 // omited
}

И строка с ключевым словом throwe a "не может конвертировать из типа элемента Object в Element" ошибка компилятора.

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 24 ноября 2008

IElementList необходимо реализовать Iterable<E>. В противном случае интерфейс указывает Iterator iterator(), а не Iterator<E> iterator(). Это заставляет компилятор думать, что вы перебираете Object s.

Я сделал это изменение, и оно скомпилировалось нормально (после добавления некоторых нулевых возвратов).

0 голосов
/ 24 ноября 2008

Ваша функция возвращает ElementList, а не Element, и ElementList не является итеративным по элементу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...