//: patterns/recycleb/RecycleB.java // Adding more objects to the recycling problem. package patterns.recycleb; import patterns.trash.*; import java.util.*; // A List that admits only the right type: class Tbin extends ArrayList { Class binType; Tbin(Class type) { binType = type; } @SuppressWarnings("unchecked") boolean grab(Trash t) { // Comparing class types: if(t.getClass().equals(binType)) { add((T)t); // Downcast to this TBin's type return true; // Object grabbed } return false; // Object not grabbed } } class TbinList extends ArrayList> { // (1) boolean sort(T t) { for(Tbin ts : this) if(ts.grab(t)) return true; return false; // bin not found for t } void sortBin(Tbin bin) { // (2) for(T aBin : bin) if(!sort(aBin)) System.err.println("Bin not found"); } } public class RecycleB { static Tbin bin = new Tbin<>(Trash.class); public static void main(String[] args) { // Fill up the Trash bin: ParseTrash.fillBin("Trash.dat", bin); TbinList trashBins = new TbinList<>(); trashBins.add(new Tbin<>(Aluminum.class)); trashBins.add(new Tbin<>(Paper.class)); trashBins.add(new Tbin<>(Glass.class)); // add one line here: (3) trashBins.add(new Tbin<>(Cardboard.class)); trashBins.sortBin(bin); // (4) trashBins.forEach(Trash::sumValue); Trash.sumValue(bin); } } ///:~