待创建类型
package com.test.coffee;
public class Coffee {
private static long counter=0;
private final long id=counter++;
public String toString(){
return getClass().getSimpleName()+" "+id;
}
}<pre name="code" class="html">具体类型
package com.test.coffee;
public class Latte extends Coffee{
}
package com.test.coffee;
public class Mocha extends Coffee{
}
package com.test.coffee;
public class Cappuccino extends Coffee{
}
<pre name="code" class="html">类生成器接口
public interface Generator<T> {
T next();
}
import java.util.Iterator;
import java.util.Random;
import com.test.interfac.Generator;
public class CoffeeGenerator implements Generator<Coffee>,Iterable<Coffee>{
private Class[] types={Latte.class,Mocha.class,Cappuccino.class};
private static Random rand=new Random(47);
public CoffeeGenerator(){}
private int size = 0;
public CoffeeGenerator(int sz){
size=sz;
}
@Override
public Coffee next() {
try {
return (Coffee) types[rand.nextInt(types.length)].newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
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(){
}
}
@Override
public Iterator<Coffee> iterator() {
// TODO Auto-generated method stub
return new CoffeeIterator();
}
public static void main(String[] args) {
CoffeeGenerator gen = new CoffeeGenerator();
for(int i=0;i<5;i++){
System.out.println(gen.next());
}
for(Coffee c: new CoffeeGenerator(5)){
System.out.println(c);
}
}
}
Output:
Cappuccino 0
Cappuccino 1
Mocha 2
Cappuccino 3
Mocha 4
Cappuccino 5
Mocha 6
Cappuccino 7
Latte 8
Mocha 9