Java - 具有自己的 hasNext() 和 next() 的可迭代:如何做对?

Big*_*air 1 java iterator iterable

我有一个实现 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();
}
Run Code Online (Sandbox Code Playgroud)

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

Per*_*ion 5

您的方法定义在错误的类上。的hasNextnextremove方法需要在规定的Iterator执行,而不是在Iterable。如果您在每个方法上放置了 @Override 注释,编译器就会通知您这个错误。

照原样,您可以:

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

请注意,当您这样做时,您将无法再利用嵌入列表的迭代器,但您将有效地定义自己的迭代器(当然,您可以将其包装起来)。