汎用インタフェース
1551 ワード
//
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?