eg:
package com.org.max.test; interface Generator<T> { T next(); } class Fibonacci implements Generator<Integer> { private int count=0; @Override public Integer next() { return fib(count++); } private int fib(int n) { if(n<2) return 1; else return fib(n-1)+fib(n-2); } } public class Test { public static void main(String[] args) { Fibonacci fibonacci = new Fibonacci(); for(int i=1;i<18;i++){ System.out.println(fibonacci.next()); } } }
这是think of java 比较 好的一段代码, p 360
他是将保留一个刘的全局变量 count 然后每一次,调用同一个count ,
package com.org.max.test; import java.util.Iterator; interface Generator<T> { T next(); } class Fibonacci implements Generator<Integer> { private int count=0; @Override public Integer next() { return fib(count++); } private int fib(int n) { if(n<2) return 1; else return fib(n-1)+fib(n-2); } } class IterableFibonacci extends Fibonacci implements Iterable<Integer>{ private int i; public IterableFibonacci(int i) { this.i = i; } @Override public Iterator<Integer> iterator() { return new Iterator<Integer>() { @Override public boolean hasNext() { return i>0; } @Override public Integer next() { i--; return IterableFibonacci.this.next(); } }; } } public class Test { public static void main(String[] args) { for(int temp:new IterableFibonacci(18)) System.out.println(temp); } }当对象实现 Iteraable 接口时,并且重写Iterable 方法,
for(int temp:new IterableFibonacci(18))构造放回对象索引
间接调用 next() 方法