我有一个实现 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 的其他线程似乎并不关心自己的 next 方法,所以有人对我有建议吗?
最佳答案
您的方法定义在错误的类上。 hasNext
、next
和 remove
方法需要在 Iterator
实现上定义,而不是在 上定义可迭代
。如果您在每个方法上都放置了 @Override 注释,编译器会通知您这个错误。
事实上,您可以:
- 为您的迭代器创建一个匿名内部类,并将这些方法移动到它的主体中
- 为迭代器创建一个独立的类,并再次将这些方法移入其中
请注意,当您执行此操作时,您将无法再利用嵌入式列表的迭代器,但您实际上是在定义自己的迭代器(当然,您可以将其包裹起来)。
关于Java - 可使用自己的 hasNext() 和 next() 迭代 : how to do it right?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15863920/