java - 为什么这个通用接口(interface)堆栈不起作用?

标签 java

我有一堆通用接口(interface)和类

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
}

带有 for 关键字的行会抛出“无法从元素类型对象转换为元素”编译器错误。

提前致谢。

最佳答案

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

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

关于java - 为什么这个通用接口(interface)堆栈不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/314600/

相关文章:

java - 如何遵守Sonar的规则 "SQL binding mechanisms should be used"

java - 超出最大游标数 SQLException-- 配置问题或游标泄漏?

java - 获取 spring bean 初始化时间

java - FileChannel TransferFrom的评论说明

找不到 javax.ws.rs.core.HttpHeaders.CONTENT_DISPOSITION

java - 如何将 jsonobject 添加到我想要的 jsonarray 中

java - Java 中的空循环

java - 在java中重写抽象方法意味着类抽象类还是非抽象类?

java - AspectJ初学者问题

java - 适用于 Java 9 的 JDBC 和 MS SQL Server 驱动程序