Java - 可使用自己的 hasNext() 和 next() 迭代 : how to do it right?

标签 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();
}

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

最佳答案

您的方法定义在错误的类上。 hasNextnextremove 方法需要在 Iterator 实现上定义,而不是在 上定义可迭代。如果您在每个方法上都放置了 @Override 注释,编译器会通知您这个错误。

事实上,您可以:

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

请注意,当您执行此操作时,您将无法再利用嵌入式列表的迭代器,但您实际上是在定义自己的迭代器(当然,您可以将其包裹起来)。

关于Java - 可使用自己的 hasNext() 和 next() 迭代 : how to do it right?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15863920/

相关文章:

java - Android ExpandableListView - 在哪里放置子按钮的按钮监听器

javascript - 在 JavaScript 中,一个可迭代对象应该重复迭代吗?

java - 为什么Java中的String类没有实现Iterable?

PHP - 迭代两次通用迭代

java - 尝试添加进度时进度条变为空

java - 检查网页是否已经下载

Java,计算从1901年到2000年每个月的第一个星期天的数量

java - 如何从二维数组列表中的特定位置提取整数?

c# - C# 中的生成器?

带有 Map 和 For 的 Scala 迭代器