1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
   | package lianxi;
  public interface Generator<T> { 	T RandomNext(); }
  AnimalGenerator.java: package lianxi;
  import java.util.Iterator; import java.util.Random;
 
  public class AnimalGenerator implements Generator<Animal>, Iterable<Animal>{ 	 	private Class[] types = {Dog.class, Cat.class}; 	 	private static Random rand = new Random(47); 	 	public AnimalGenerator() {} 	 	 	@Override 	public Animal RandomNext() { 		try{ 			return (Animal)types[rand.nextInt(types.length)].newInstance(); 		}catch(Exception e){ 			throw new RuntimeException(e); 		} 	} 	 	 	 	private int size = 0; 	 	public AnimalGenerator(int size){ 		this.size = size; 	}
  	@Override 	public Iterator<Animal> iterator(){ 		return new  AnimalIterator(); 	} 	 	private class AnimalIterator implements Iterator<Animal>{ 		 		private int count = size; 		 		@Override 		public boolean hasNext() { 			return count > 0; 		} 	 		@Override 		public Animal next() { 			count--; 			return AnimalGenerator.this.RandomNext(); 		} 	 		@Override 		public void remove(){ 			throw new UnsupportedOperationException(); 		} 	}
  	public static void main(String[] args){ 		 		AnimalGenerator gen = new AnimalGenerator(); 		 		for(int i = 0; i < 5; i++){ 			System.out.println(gen.RandomNext()); 		} 		System.out.println("-------------------"); 		for(Animal a : new AnimalGenerator(5)){ 			System.out.println(a); 		} 	} }
   |