Generics give us more than a way to declare type-safe containers. They give us a powerful mechanism for code reuse. We can create strategies for specific methods to accomplish a goal, or policies for more general techniques. We can build generic algorithms out of smaller code snippets, and compose these to declaratively build what we need without coding it.