泛型接口,生成器

//生成器
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?





















你可能感兴趣的:(泛型接口,生成器)