为什么这个通用接口堆栈不起作用?

时间:2008-11-24 16:07:15

标签: java

我有一堆通用接口和类

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的行“无法从元素类型Object转换为Element”编译器错误。

提前致谢。

2 个答案:

答案 0 :(得分:7)

IElementList需要实施Iterable<E>。否则,接口指定Iterator iterator(),而不是Iterator<E> iterator()。这使得编译器认为您正在迭代Object

我做了这个改动,编译得很好(在添加一些null返回之后)。

答案 1 :(得分:0)

您的函数返回ElementList而不是Element,而ElementList不是Element上的可迭代