//: generics/BankTeller.java // ©2015 MindView LLC: see Copyright.txt // A very simple bank teller simulation. import java.util.*; import net.mindview.util.*; class Customer { private static long counter = 1; private final long id = counter++; private Customer() {} @Override public String toString() { return "Customer " + id; } // A method to produce Generator objects: public static Generator generator() { return Customer::new; // Constructor reference } } class Teller { private static long counter = 1; private final long id = counter++; private Teller() {} @Override public String toString() { return "Teller " + id; } // A single Generator object: public static Generator generator = Teller::new; } public class BankTeller { public static void serve(Teller t, Customer c) { System.out.println(t + " serves " + c); } public static void main(String[] args) { Random rand = new Random(47); Queue line = new LinkedList<>(); Generators.fill(line, Customer.generator(), 15); List tellers = new ArrayList<>(); Generators.fill(tellers, Teller.generator, 4); for(Customer c : line) serve(tellers.get(rand.nextInt(tellers.size())), c); } } /* Output: Teller 3 serves Customer 1 Teller 2 serves Customer 2 Teller 3 serves Customer 3 Teller 1 serves Customer 4 Teller 1 serves Customer 5 Teller 3 serves Customer 6 Teller 1 serves Customer 7 Teller 2 serves Customer 8 Teller 3 serves Customer 9 Teller 3 serves Customer 10 Teller 2 serves Customer 11 Teller 4 serves Customer 12 Teller 2 serves Customer 13 Teller 1 serves Customer 14 Teller 1 serves Customer 15 *///:~