日期:2014-05-20  浏览次数:20726 次

关于迭代器问题
JAVA编程思想第四版 360页    源代码如下:
package com.javase;
public interface Generator<T> {
T next();
}





package com.javase;

public class Fibonacci implements Generator<Integer>{
private int count = 0;
public Integer next(){
return fib(count++);
}
private int fib(int n){
if(n<2) return 1;
return fib(n-2) + fib(n-1);
}
}





package com.javase;

import java.util.Iterator;

public class IterableFibonacci extends Fibonacci implements Iterable<Integer> {
private int n;
public IterableFibonacci(int count) {
n = count;
}
public Iterator<Integer> iterator() {
return new Iterator<Integer>() {
public boolean hasNext() {
return n > 0;
}
public Integer next() {
n--;;
return IterableFibonacci.this.next();
}
public void remove() {
}
};
}
public static void main(String[] args) {
for(int i:new IterableFibonacci(18))
System.out.println(i + " ");
}
}




求解这段代码具体执行过程,foreach中是什么时候为什么调用了iterator方法

------解决方案--------------------
程序编译之后,编译器自动做的优化,转化成iterator的调用。
------解决方案--------------------
引用:
引用:程序编译之后,编译器自动做的优化,转化成iterator的调用。
是不是只要实现了集合类型,都可以这样做?


只要实现了Iterable,都可以这样做。

另外数组也可以这样做。