关于迭代器问题
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的调用。
------解决方案--------------------
只要实现了Iterable,都可以这样做。
另外数组也可以这样做。