/*
*该程序演示随机生成任意数量的演员
*/
import java.util.*;
interface Generator<T> { public T next();}
class GuysMovie { //电影演员
private static long counter=0;
private final long id=counter++;
public String toString(){
return getClass().getSimpleName()+" "+id;
}
}
class GoodGuysMovie extends GuysMovie {} //优秀演员分隔
class Chan extends GoodGuysMovie { }
class GiGi extends GoodGuysMovie { }
class BadGuysMovie extends GuysMovie { } //差演员分隔
class EdisonChen extends BadGuysMovie{ }
class GillianYanTungChung extends BadGuysMovie{ }
public class MakeGuysMovie implements Iterable<GuysMovie>,Generator<GuysMovie> {
private int n;
public MakeGuysMovie(int n){this.n=n;}
private Class[] types={Chan.class,GiGi.class,EdisonChen.class,GillianYanTungChung.class};
private Random rand=new Random(47);
//实现Generator接口方法,为什么不直接在 MakeGuysMovie使用泛型呢?这是为了保持迭代一致。
public GuysMovie next(){
try{
return (GuysMovie)(types[rand.nextInt(types.length)].newInstance());
}catch(Exception e){
throw new RuntimeException(e);
}
}
//实现Iterable接口,方便使用for-each语句
public Iterator<GuysMovie> iterator(){
return new Iterator<GuysMovie>(){
int count=MakeGuysMovie.this.n;
public boolean hasNext(){ return count>0;}
public GuysMovie next(){
count--;
return MakeGuysMovie.this.next();
}
public void remove(){
throw new UnsupportedOperationException();
}
};
}
public static void main(String[] args){
for(GuysMovie guy: new MakeGuysMovie(10)) //随机生成10个演员
System.out.println(guy);
}
}