Generics make it possible to design classes and methods that defer the specification of one or more types until the class or method is declared and instantiated by client code. There are a number of constraints that we can apply to generics, and this article sums up those constraints and how to use them.