//生成器
public interface Generator<T>{
T next();
}
//Coffee.java
public class Coffee{
private static long counter = 0;
private final long id =counter++;
public String toString(){
return getClass().getSimpleName()+" "+id;
}
}
//继承coffee 的类
public class Latte extends Coffee{}
public class Mocha extends Coffee{}
//实现Gernerator<Coffee>接口
import java.util.*;
public class CoffeeGenerator implements Generator<Coffee>,Iterable<Coffee>{
private Class[] types={Latte.class,Mocha.class};
private static Random rand = new Random(47);
public CoffeeGenerator(){}
private int size=0;
public CoffeeGenerator(int sz){size=sz;}
public Coffee next(){
try{
return (Coffee)types[rand.nextInt(types.length)].newInstance();
}
catch(Exception e){
throw new RuntimeException(e);
}
}
class CoffeeIterator implements Iterator<Coffee>{
int count =size;
public boolean hasNext(){
return count>0;
}
public Coffee next(){
count--;
return CoffeeGenerator.this.next();
}
public void remove(){
throw new UnsupportedOperationException();
}
};
public Iterator<Coffee> iterator(){
return new CoffeeIterator();
}
public static void main(String[] args) {
CoffeeGenerator gen =new CoffeeGenerator();
for (int i =0;i<2 ;i++ )
System.out.println(gen.next());
//我去,输出的gen.next();造成数字是 0 1 3 5,改成c,就是 0 1 2 3。
for (Coffee c:new CoffeeGenerator(2))
System.out.println(gen.next());
}
}
结果:
Mocha 0
Latte 1
Latte 3
Mocha 5
求教:为什么上述数字不是0 1 2 3?转载于:https://my.oschina.net/u/1401580/blog/227550