我有一个实现Iterable的类,但是具有自己的hasNext()next()方法,如下所示:

public class BLMovie implements Iterable<BLMovieFrame> {

@Override
public Iterator<BLMovieFrame> iterator() {
    iteratorVar = 0;
    return liste.iterator();
}

public boolean hasNext() {
    if (loop)
        return true;
    return iteratorVar < liste.size();
}

public BLMovieFrame next() {
    iteratorVar = (iteratorVar++)%(liste.size()-1);
    return liste.get(iteratorVar);
}

public void remove() {
    throw new UnsupportedOperationException();
}


我很确定这不是最好的方法,
 关于Iterable的其他线程似乎并不关心自己的下一个方法,那么有人对我有建议吗?

最佳答案

您的方法在错误的类上定义。 hasNextnextremove方法需要在Iterator实现上定义,而不是在Iterable上定义。如果您在每个方法上都放置了@Override注释,则编译器将告知您该错误。

实际上,您可以:


为您的迭代器创建一个匿名内部类,并将这些方法移入其主体
为迭代器创建一个独立的类,然后再次将这些方法移入其中


请注意,执行此操作时,您将不再能够利用嵌入式列表的迭代器,但可以有效地定义自己的迭代器(当然,可以对其进行包装)。

10-07 20:39