我有一个实现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的其他线程似乎并不关心自己的下一个方法,那么有人对我有建议吗?
最佳答案
您的方法在错误的类上定义。 hasNext
,next
和remove
方法需要在Iterator
实现上定义,而不是在Iterable
上定义。如果您在每个方法上都放置了@Override注释,则编译器将告知您该错误。
实际上,您可以:
为您的迭代器创建一个匿名内部类,并将这些方法移入其主体
为迭代器创建一个独立的类,然后再次将这些方法移入其中
请注意,执行此操作时,您将不再能够利用嵌入式列表的迭代器,但可以有效地定义自己的迭代器(当然,可以对其进行包装)。