遍历 Iterator<T> 类型的对象

Iterating over an object of type Iterator<T>

在阅读关于 Generators 的维基百科文章时,我发现以下 Java 实现迭代泛型 Iterator<Integer> 产生无限的斐波那契数列

Iterator<Integer> fibo = new Iterator<Integer>() {
    int a = 1;
    int b = 1;
    int total;

    @Override
    public boolean hasNext() {
        return true;
    }

    @Override
    public Integer next() {
        total = a + b;
        a = b;
        b = total;
        return total;
    }

    @Override
    public void remove() {
        throw new UnsupportedOperationException();
    }
}
// this could then be used as...
for(int f: fibo) {
    System.out.println("next Fibonacci number is " + f);
    if (someCondition(f)) break;
} 

但是,当放在 class 的 main 方法中时,上面的代码不起作用。它说

Can only iterate over an array or an instance of java.lang.Iterable

这是可以理解的。这是否意味着上面的例子是错误的或不完整的?我错过了什么吗?

维基百科上的代码示例无效,但您仍然可以轻松地进行迭代,只需显式调用 hasNext()next()

// We know that fibo.hasNext() will always return true, but
// in general you don't...
while (fibo.hasNext()) {
    int f = fibo.next();
    System.out.println("next Fibonacci number is " + f);
    if (someCondition(f)) break;
}

删除 for 循环并使用 while 循环。因为迭代器不是数组类型或集合。 试试这个

while(fibo.hasNext()) {
    System.out.println(fibo.next());

}