我有一堆通用接口和类
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
}
}
Run Code Online (Sandbox Code Playgroud)
然后是一个简单的代码
ElementListGroup group;
for(Element e : group.getChosenElementList())
{
// omited
}
Run Code Online (Sandbox Code Playgroud)
而对于关键字throwe的行"无法从元素类型Object转换为Element"编译器错误.
提前致谢.
IElementList
需要实施Iterable<E>
.否则,接口指定Iterator iterator()
,而不是Iterator<E> iterator()
.这使编译器认为您正在迭代Object
s.
我做了这个改变,它编译得很好(添加一些null返回后).