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); } } }
|